假设我们有以下数据:
+-----+------------+------------------+
| uid | company + last_complaint |
+-----+------------+------------------+
| 1 | Foo inc + 2015-01-01 |
| 2 | Bar ltd + 2015-02-02 |
| 3 | Baz inc + 2015-03-03 |
| 4 | Bar ltd + 2015-04-04 |
| 5 | Foo inc + 2015-05-05 |
+-----+------------+------------------+
我需要对记录进行排序,以便:
所以期望的结果如下:
+-----+------------+------------------+
| uid | company + last_complaint |
+-----+------------+------------------+
| 5 | Foo inc + 2015-05-05 |
| 1 | Foo inc + 2015-01-01 |
| 4 | Bar ltd + 2015-04-04 |
| 2 | Bar ltd + 2015-02-02 |
| 3 | Baz inc + 2015-03-03 |
+-----+------------+------------------+
除此之外,我可能需要显示此类订单的第二页(如果同一公司在页面之间进行分割,则可以。)
很明显,ORDER BY
根本不够好,需要更好的工具。我查看了一些分区的查询,但是我不确定这个概念是否可以成功应用于这种情况。
提前致谢。
答案 0 :(得分:1)
以下是一种使用窗口函数获取每家公司最近投诉日期的方法:
select d.*
from (select d.*,
max(last_complaint) over (partition by company) as maxlc
from data d
) d
order by maxlc desc, company, last_complaint desc;
答案 1 :(得分:1)
这应该可以解决问题,子查询首先根据上次投诉对公司列进行排序,然后根据该顺序从主表中返回数据:
ElementHost