【发布时间】:2016-09-19 20:41:00
【问题描述】:
我的问题
我想返回 Oracle 10g 中按日期排序的每个组的前 n 行
我的桌子
EMPLOYEE|START_DATE|DEPARTMENT
Amy |01-02-1901|Sales
Edwina |01-02-1902|Mergers
Tawnee |01-02-1904|Legal
Trudy |01-02-1998|Sales
Tanner |01-02-1967|Sales
Kelly |01-02-1954|Mergers
Jenny |01-02-1991|Sales
Jacinta |01-02-1924|Legal
Suzanne |01-02-1976|Legal
Jacqui |01-02-1989|Legal
Jill |01-02-1989|Mergers
Kate |01-02-1998|Mergers
Jane |01-02-1900|Sales
Louise |01-02-1912|Mergers
Kim |01-02-1976|Sales
Cara |01-02-1955|Sales
Kirsten |01-02-1933|Legal
Sarah |01-02-1998|Legal
期望的结果
EMPLOYEE|START_DATE|DEPARTMENT
Jane |01-02-1900|Sales
Amy |01-02-1901|Sales
Tawnee |01-02-1904|Legal
Jacinta |01-02-1924|Legal
Sarah |01-02-1998|Legal
Edwina |01-02-1902|Mergers
Louise |01-02-1912|Mergers
我尝试过的
(select * from
employees where
DEPARTMENT = 'Sales' and
rownum <3;)
UNION
(select * from
employees where
DEPARTMENT = 'Legal' and
rownum <3;)
UNION
(select * from
employees where
DEPARTMENT = 'Mergers' and
rownum <3;)
真的很丑的查询
我在想是否有办法让你成为一个
OVER (PARTITION BY DEPARTMENT)
但是根据我的阅读,这需要在分析函数之前进行(计数,总和)。有没有更优雅、更便宜的解决方案?
【问题讨论】:
-
你在正确的轨道上。看看 Nir Levy 在上面的评论中指出的线程。看看您是否可以根据您的情况调整解决方案 - 这是正确的方法。如果您的数据中可能存在关联,则存在细微的变化 - 如果没有,您应该很高兴。如果那里的解决方案不起作用,请再次写信解释您发现困难的确切位置或与旧案例相比您的案例有什么不同。祝你好运!