0

私の各行には日付があります。データベースに適切な日付を保持してもらいたい。しかし、私は最初のデートだけが欲しい状況にあります。しかし、私はまだ他のすべての行が必要です。したがって、結果の日付列にすべて同じ日付を入力したいと思います。

例として(自分をうまく表現できていないと思うので)

私はこれを持っています:

名前の値の日付
10 5/13
b 14 2/13
c 20 1/13
11 7/13
5 8/13
b 8 9/13

私はそれが結果でこのようになることを望みます:

名前の値の日付
26 5/13
b 22 5/13
c 20 5/13

この情報を検索しましたが、最初の行を選択する方法しか見つかりません。

今のところ私はやっています

SELECT name, SUM(value), date FROM table
ORDER BY name

そして、私は次に何をすべきかについて無知です。

ありがとう :)

4

3 に答える 3

0

b目的の結果はどちらにも存在しない日付を示しているため、質問は少し混乱していますが、それが必要なc結果である場合は、次のようなものを使用できます。

select name, sum(value) value, d.date
from yt
cross join
(
  select min(date) date
  from yt
  where name = (select min(name) 
                from yt)
) d
group by name, d.date;

デモで SQL Fiddle を参照してください

min(date)しかし、実際にはfor eachが必要なようですname:

select name, sum(value) value, min(date)
from yt
group by name;

SQL Fiddle with Demoを参照してください。

日付の順序を によって決定する必要がある場合は、次をname使用できます。

select t.name, sum(value) value, d.date
from yt t
cross join
(
  select top 1 name, date
  from yt
  order by name, date
) d
group by t.name, d.date;

デモを見る

于 2013-05-24T15:11:09.043 に答える
0

クエリに対してのみこれを実行し、特定のクライアント要件に対してこの集計データを提供する場合は、@ freshPrince の回答が適切です。ただし、テーブル自体のデータを実際に変更し、問題が再発しないようにする場合は、スキーマを変更する必要があります。

Create Table newTable(
      name varChar(30) not null, 
      date datetime not null,
      value decimal(10,2) not null default(0),
      primary key (name, date) )

Insert newTable (name, date, value) 
Select name, SUM(value), Min(date)
FROM currentTable
Group By Name

古いテーブルを削除し、新しいテーブルの名前を変更します...

また、新しい行を挿入するために使用されるプロセスを変更して、常に新しい行を挿入する代わりに、指定された名前と日付の既存の行が既に存在する場合は更新する必要があります...

于 2013-05-24T15:12:14.640 に答える
0

データベースには「最初」という概念がありません。これは試みですが、最初に決定する順序の方法がない限り、保証はありません:

select name, sum(value), const.date
from table cross join
     (select top 1 date from table) const
group by name, const.date
于 2013-05-24T15:10:14.413 に答える