0

我的每一行都有一个日期。我希望数据库保持良好的日期。但我现在只想要第一次约会。但我仍然想要所有其他行。所以我想在我的结果中用所有相同的日期填充日期列。

举个例子(因为我觉得我表达得不好)

我有这个:

姓名起息日
10 5/13
b 14 2/13
c 20 1/13
13 年 7 月 11 日
13 年 8 月 5 日
2013 年 9 月 8 日

我希望它在结果中变成这样:

姓名起息日
13 年 5 月 26 日
b 22 年 5 月 13 日
c 20 年 5 月 13 日

我搜索了这些信息,但我只找到了选择第一行的方法。

现在我正在做

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

我对接下来要做什么一无所知。

谢谢 :)

4

3 回答 3

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 回答
0

您的问题有点令人困惑,因为您想要的结果显示的日期不存在,bc如果这是您想要的结果,您可以使用类似于以下内容的内容:

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

如果日期的顺序应该由 the 确定,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 回答