根据 SQLite 中的日期对嵌套组进行排序
order the nested group based on date in SQLite
我的 table 看起来像这样(根据 GrandParent
、Parent
和 Child
分组):
Child | Parent | GrandParent | Date
---------------------------------------------------
2 | 1 | 1 | 2015-11-04 01:30:22
3 | 1 | 1 | 2015-11-05 01:30:22
4 | 4 | 4 | 2015-11-04 01:31:41
5 | 5 | 5 | 2015-11-04 01:31:41
7 | 7 | 7 | 2014-08-19 03:45:01
88 | 8 | 8 | 2014-08-19 03:45:01
90 | 8 | 8 | 2014-08-19 03:45:01
97 | 8 | 8 | 2015-03-18 03:45:01
704 | 8 | 8 | 2015-03-18 03:45:01
27 | 11 | 9 | 2015-10-22 06:42:30
28 | 11 | 9 | 2015-10-24 06:42:30
30 | 12 | 9 | 2015-11-15 06:42:30
31 | 12 | 9 | 2015-11-16 06:42:30
Child
没有 Parent
会认为自己是 Parent
和 GrandParent
.
我的目标是订购上述 table 这样:
GrandParent
最近日期的组应该在顶部
- 在
GrandParent
中,日期最近的 Parent
组应该在顶部
- 在
Parent
内,最近日期的 Child
应该在顶部
结果应该是:
Child | Parent | GrandParent | Date
---------------------------------------------------
31 | 12 | 9 | 2015-11-16 06:42:30
30 | 12 | 9 | 2015-11-15 06:42:30
28 | 11 | 9 | 2015-10-24 06:42:30
27 | 11 | 9 | 2015-10-22 06:42:30
3 | 1 | 1 | 2015-11-05 01:30:22
2 | 1 | 1 | 2015-11-04 01:30:22
4 | 4 | 4 | 2015-11-04 01:31:41
5 | 5 | 5 | 2015-11-04 01:31:41
97 | 8 | 8 | 2015-03-18 03:45:01
704 | 8 | 8 | 2015-03-18 03:45:01
88 | 8 | 8 | 2014-08-19 03:45:01
90 | 8 | 8 | 2014-08-19 03:45:01
7 | 7 | 7 | 2014-08-19 03:45:01
我想你想要这样的东西:
select t1.* from @t t1
join (select grandparent, max(date) as date from @t group by grandparent) t2
on t2.grandparent = t1.grandparent
join (select parent, max(date) as date from @t group by parent) t3
on t3.parent = t1.parent
order by t2.date desc, t3.date desc, t1.date desc
您将加入 2 个集合的初始 table,其中第一个集合表示每个 granparent
的最大日期,第二个表示每个 parents
.
的最大日期
在 ORDER BY 中使用子查询。
select child, parent, grandparent, date
from mytable
order by
(select max(date) from mytable grp where grp.grandparent = mytable.grandparent) desc,
(select max(date) from mytable grp where grp.parent = mytable.parent) desc,
date desc;
我的 table 看起来像这样(根据 GrandParent
、Parent
和 Child
分组):
Child | Parent | GrandParent | Date
---------------------------------------------------
2 | 1 | 1 | 2015-11-04 01:30:22
3 | 1 | 1 | 2015-11-05 01:30:22
4 | 4 | 4 | 2015-11-04 01:31:41
5 | 5 | 5 | 2015-11-04 01:31:41
7 | 7 | 7 | 2014-08-19 03:45:01
88 | 8 | 8 | 2014-08-19 03:45:01
90 | 8 | 8 | 2014-08-19 03:45:01
97 | 8 | 8 | 2015-03-18 03:45:01
704 | 8 | 8 | 2015-03-18 03:45:01
27 | 11 | 9 | 2015-10-22 06:42:30
28 | 11 | 9 | 2015-10-24 06:42:30
30 | 12 | 9 | 2015-11-15 06:42:30
31 | 12 | 9 | 2015-11-16 06:42:30
Child
没有 Parent
会认为自己是 Parent
和 GrandParent
.
我的目标是订购上述 table 这样:
GrandParent
最近日期的组应该在顶部- 在
GrandParent
中,日期最近的Parent
组应该在顶部 - 在
Parent
内,最近日期的Child
应该在顶部
结果应该是:
Child | Parent | GrandParent | Date
---------------------------------------------------
31 | 12 | 9 | 2015-11-16 06:42:30
30 | 12 | 9 | 2015-11-15 06:42:30
28 | 11 | 9 | 2015-10-24 06:42:30
27 | 11 | 9 | 2015-10-22 06:42:30
3 | 1 | 1 | 2015-11-05 01:30:22
2 | 1 | 1 | 2015-11-04 01:30:22
4 | 4 | 4 | 2015-11-04 01:31:41
5 | 5 | 5 | 2015-11-04 01:31:41
97 | 8 | 8 | 2015-03-18 03:45:01
704 | 8 | 8 | 2015-03-18 03:45:01
88 | 8 | 8 | 2014-08-19 03:45:01
90 | 8 | 8 | 2014-08-19 03:45:01
7 | 7 | 7 | 2014-08-19 03:45:01
我想你想要这样的东西:
select t1.* from @t t1
join (select grandparent, max(date) as date from @t group by grandparent) t2
on t2.grandparent = t1.grandparent
join (select parent, max(date) as date from @t group by parent) t3
on t3.parent = t1.parent
order by t2.date desc, t3.date desc, t1.date desc
您将加入 2 个集合的初始 table,其中第一个集合表示每个 granparent
的最大日期,第二个表示每个 parents
.
在 ORDER BY 中使用子查询。
select child, parent, grandparent, date
from mytable
order by
(select max(date) from mytable grp where grp.grandparent = mytable.grandparent) desc,
(select max(date) from mytable grp where grp.parent = mytable.parent) desc,
date desc;