【问题标题】:Select from each group the last n rows orders by date in DB2从每个组中选择 DB2 中按日期排序的最后 n 行
【发布时间】:2015-07-24 11:54:36
【问题描述】:

我正在使用DB2 数据库。我有一个包含以下列的表:

Group | Name | Date | Value

我想为每个组选择最后 10 个值(按日期排序)。我怎样才能在 DB2 中做到这一点?非常感谢。

更新:

这是我到目前为止所做的:

select Group, DATE
from MyTable
ORDER BY Group, DATE 
FETCH FIRST 10 ROWS ONLY

这个 sql 命令返回结果的前 10 行,我想为每个组获取 10 个最后的结果。

【问题讨论】:

  • 您的查询,按 desc 排序,FETCH FIRST 10 ROWS ONLY
  • @amdixon 我更新了帖子
  • 将您的order by 子句更改为使用降序desc
  • 我认为您没有理解问题所在。我不想得到所有记录的最后 10 行,而是每组的最后 10 行。即使我添加了desc,它也只返回全局结果的最后 10 行
  • 你可能想读这个; stackoverflow.com/questions/176964/…

标签: sql database select db2


【解决方案1】:

你不能用一个简单的order by 子句来做到这一点;您需要使用 OLAP 函数:

with ordered as (
  select group, 
         date, 
         row_number() over (partition by group order by date desc) as date_rank
    from mytable
)
select group, date 
  from ordered 
  where date_rank <= 10

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2020-01-31
    • 2012-02-10
    • 2020-05-20
    相关资源
    最近更新 更多