在单个表

时间:2016-11-17 09:52:48

标签: sql sql-server tsql

在我的SQL服务器数据库中,有一个表,其中每天有多个条目用于每个时间值(以整数形式,例如800 - > 08:00),具有不同的金额和唯一的ID字段。

我的表看起来像这样:

ID      NTIME   AMOUNT
8426628 828     531.81
8426629 828     782.61
8426630 829     183.41
8426631 829     183.41
8426632 829     832.41
8426633 829      32.41
8426634 830     374.41
8426635 830      78.41
8426636 830     628.41

因此,我希望获得每个不同时间值的最大id的行,如下所示:

ID      NTIME   AMOUNT
8426629 828     782.61
8426633 829      32.41
8426636 830     628.41

我尝试了以下查询:

DECLARE @t int=815;
WHILE @t<=830
  BEGIN
    select ID, NTIME, AMOUNT FROM <my_table> WHERE 
        NTIME=@t and 
        ID = 
           (select max(ID) FROM <my_table> where NTIME=@t);
    Set @t = @t + 1;
  END

获取正确的结果,但每个选择查询结果显示在不同的表中(结果1-1,结果1-2等)。有没有办法在单个结果表中获得结果,最好不创建临时表?

2 个答案:

答案 0 :(得分:1)

您可以使用group by并像这样查询:

select
    T1.ID,
    T1.NTIME,
    T1.AMOUNT
from
(
   select NTIME, max(ID) as ID
   from <my_table>
   group by NTIME
) as T
left outer join <my_table> as T1 on T1.ID = T.ID and T1.NTIME = T.NTIME

内部查询为每个不同的ID输出最大NTIME,然后加入表格以获取这些ID和NTIME对的AMOUNT

答案 1 :(得分:1)

这将为您提供所需的结果

;WITH cte AS
(
SELECT id,ntime, amount
row_number() over (partition by ntime order by id desc) seq
)

select id,ntime, amount
from cte
where seq=1