【问题标题】:How to get last 3 distinct prices based on a date column?如何根据日期列获取最后 3 个不同的价格?
【发布时间】:2017-04-14 09:51:00
【问题描述】:

我有一个包含这些列的表;

  • 代码
  • 价格
  • 日期

    所以我想要做的是获取按日期列排序的每个 id 的最后 3 个 distinct 价格值。基本上是每个 id 最近 3 个不同的价格。

表中还有一个 ID 列。它是表的主键。

编辑:正如 ughai 所说,DISTINCT 不适用于 row_number。

【问题讨论】:

  • 指定样本数据和预期结果
  • 我认为 ID 不是主键?
  • 您似乎允许重复的日期值。如果在少于 3 个不同的日期值中有超过 3 个不同的价格值,应该获得什么结果?
  • 日期值可以重复,这并不重要。我只想获得最近的 3 个不同的价格。即使所有日期值都相同,我仍然想获得 3 个不同的价格。
  • 是的,但我的问题是,如果最近日期有 4 个(或更多)不同的价格,我们应该选择哪一个三个价格?还是在这种情况下我们会选择 3 个以上的价格?

标签: sql sql-server tsql greatest-n-per-group


【解决方案1】:
Select t.id , c.Price 
from TableName t 
   CROSS APPLY (
                SELECT TOP 3 Price
                FROM TableName s
                WHERE s.ID = t.ID
                ORDER BY [DATE] DESC
                ) c (Price)
GROUP BY t.id ,  c.Price 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2021-06-08
    • 1970-01-01
    • 2021-03-23
    • 2021-07-01
    • 2020-07-07
    相关资源
    最近更新 更多