Oracle SQL查询:根据时间检索每组的最新值

前端之家收集整理的这篇文章主要介绍了Oracle SQL查询:根据时间检索每组的最新值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Oracle数据库中有下表
  1. id date quantity
  2. 1 2010-01-04 11:00 152
  3. 2 2010-01-04 11:00 210
  4. 1 2010-01-04 10:45 132
  5. 2 2010-01-04 10:45 318
  6. 4 2010-01-04 10:45 122
  7. 1 2010-01-04 10:30 1
  8. 3 2010-01-04 10:30 214
  9. 2 2010-01-04 10:30 5515
  10. 4 2010-01-04 10:30 210

现在我想要检索每个id的最新值(及其时间).示例输出

  1. id date quantity
  2. 1 2010-01-04 11:00 152
  3. 2 2010-01-04 11:00 210
  4. 3 2010-01-04 10:30 214
  5. 4 2010-01-04 10:45 122

我只是无法弄清楚如何将它放入查询中…

另外以下选项会很好:

选项1:查询只能返回最后XX分钟的值.

选项2:该id应与具有id和idname的另一个表的文本连接. id的输出应该是:id-idname(例如1-testid1).

非常感谢任何帮助!

给定这个数据…
  1. sql> select * from qtys
  2. 2 /
  3.  
  4. ID TS QTY
  5. ---------- ---------------- ----------
  6. 1 2010-01-04 11:00 152
  7. 2 2010-01-04 11:00 210
  8. 1 2010-01-04 10:45 132
  9. 2 2010-01-04 10:45 318
  10. 4 2010-01-04 10:45 122
  11. 1 2010-01-04 10:30 1
  12. 3 2010-01-04 10:30 214
  13. 2 2010-01-04 10:30 5515
  14. 4 2010-01-04 10:30 210
  15.  
  16. 9 rows selected.
  17.  
  18. sql>

…以下查询给出你想要的…

  1. sql> select x.id
  2. 2,x.ts as "DATE"
  3. 3,x.qty as "QUANTITY"
  4. 4 from (
  5. 5 select id
  6. 6,ts
  7. 7,rank () over (partition by id order by ts desc) as rnk
  8. 8,qty
  9. 9 from qtys ) x
  10. 10 where x.rnk = 1
  11. 11 /
  12.  
  13. ID DATE QUANTITY
  14. ---------- ---------------- ----------
  15. 1 2010-01-04 11:00 152
  16. 2 2010-01-04 11:00 210
  17. 3 2010-01-04 10:30 214
  18. 4 2010-01-04 10:45 122
  19.  
  20. sql>

关于您的额外要求,您可以向外部WHERE子句应用其他过滤器.类似地,您可以将其他表连接到内联视图,就像其他表一样.

猜你在找的Oracle相关文章