在我的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等)。有没有办法在单个结果表中获得结果,最好不创建临时表?
答案 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