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

SQL获取每个列值的前2个结果,sql,sql-server,Sql,Sql Server,我有一个表“Cashup_Till”,它记录了某一特定场所在给定日期内记录的所有数据,每个场所都有多个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个收银台,因此理想情况下,我需要在一次通话中完成所有收银台。

我有一个表“Cashup_Till”,它记录了某一特定场所在给定日期内记录的所有数据,每个场所都有多个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个收银台,因此理想情况下,我需要在一次通话中完成所有收银台。我可以传入用户定义的表类型的till编号,然后在子查询中选择它们,但就我的SQL知识而言,有人有解决方案吗?

这里有一种方法:

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;

哪些列表示地点?@TimBiegeleisen我没有在示例中包括地点/日期列,只是为了简单起见,我在where子句中包含了一个Site_day_Id。您所说的前两天是什么意思?每天是否有多个记录?如果最近一天没有记录怎么办?@GordonLinoff表中有一个Site\u day\u Id列,但我认为没有必要在示例中包括它。是的,您的假设是正确的,每个till每天只有一个条目-我来试一试,谢谢
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;