相关疑难解决方法(0)

每组检索 n 行

我经常需要从结果集中的每个组中选择一些行。

例如,我可能想列出每个客户最近的“n”个最高或最低订单值。

在更复杂的情况下,要列出的行数可能因组而异(由分组/父记录的属性定义)。这部分绝对是可选的/为了额外的学分,而不是为了劝阻人们回答。

在 SQL Server 2005 及更高版本中解决这些类型问题的主要选项是什么?每种方法的主要优点和缺点是什么?

AdventureWorks 示例(为清晰起见,可选)

  1. 列出表中五个最近的交易日期和 ID TransactionHistory,每个产品以从 M 到 R 的字母开头。
  2. 再次相同,但n每个产品都有历史记录行,其中nDaysToManufactureProduct 属性的五倍。
  3. 同样,对于每个产品恰好需要一条历史记录行的特殊情况(最近的单个条目由TransactionDate, .tie-break on TransactionID.

sql-server t-sql greatest-n-per-group

97
推荐指数
6
解决办法
7万
查看次数

如何选择不同的TOP但按列分组

我有一个 500 行的结果集,但这是 100 张发票。我只需要最后一张发票的前 10 个。

我发现了类似的东西:如何从每个类别中选择前 10 条记录

样本数据:

InvNr | DetailLine
111   |    1       
111   |    2
112   |    1
112   |    2
112   |    3
113   |    1
113   |    2
114   |    1
115   |    1
...   |    ...
Run Code Online (Sandbox Code Playgroud)

我希望得到的是例如:

SELECT DISTINCT TOP 2 InvNr, DetailLine FROM tbl_Invoice
Run Code Online (Sandbox Code Playgroud)

有了这个结果:

InvNr | DetailLine
111   |    1       
111   |    2
112   |    1
112   |    2
112   |    3
Run Code Online (Sandbox Code Playgroud)

更新:
所以我需要他们创建的最后 10 个(或上例中的前 2 个)发票,但每个发票可以有“x”个明细行,我希望结果中的所有明细行(最后 10 …

sql-server sql-server-2008-r2 group-by top

2
推荐指数
1
解决办法
9247
查看次数