SQL获取每个列值的前2个结果

时间:2017-10-25 10:24:23

标签: sql sql-server

我有一张桌子' Cashup_Till'它记录了特定日期在特定日期的场地中记录的所有数据,每个场地都有多个标记,所有数据都带有指定的数字' Till_No'。我需要为每个号码获得前2天的条目。对于每个人来说,我可以做到这一点......

SELECT TOP 2 T.* FROM CashUp_Till T 
WHERE T.Till_No = (Enter Till Number Here)
ORDER BY T.Till_Id DESC

有些场地有20到30次,所以理想情况下我需要在一次通话中完成所有的操作。我可以传入一个用户定义的表格类型的数字,然后在子查询中选择它们,但就我的SQL知识带给我的那样,是否有人有解决方案?

1 个答案:

答案 0 :(得分:1)

这是一种方式:

SELECT T.*
FROM (SELECT T.*,
             ROW_NUMBER() OVER (PARTITION BY Till_No ORDER BY Till_Id DESC) as seqnum
      FROM CashUp_Till T 
     ) T
WHERE seqnum <= 2;

这假设每天有一条记录,我认为这是由问题提出的。

如果你有一个单独的tills表,那么:

select ct.*
from t cross apply
     (select top 2 ct.*
      from cashup_till ct
      where ct.till_no = t.till_no
      order by till_id desc
     ) ct;