【发布时间】:2011-10-05 13:50:06
【问题描述】:
好的,下面是对所有 SQL 专业人员的挑战: 我有一张表,其中包含两列兴趣,组和生日。只有一些行具有分配给它们的组。 我现在想打印按生日排序的所有行,但我也希望具有相同组的所有行最终彼此相邻。这样做的唯一半明智的方法是在排序时对组中的所有行使用组的平均生日。问题是,这可以用纯 SQL(本例中为 MySQL)来完成,还是需要一些脚本逻辑?
为了说明,用给定的表格:
id | group | birthdate
---+-------+-----------
1 | 1 | 1989-12-07
2 | NULL | 1990-03-14
3 | 1 | 1987-05-25
4 | NULL | 1985-09-29
5 | NULL | 1988-11-11
假设 1987-05-25 和 1989-12-07 的“平均值”是 1988-08-30(这可以通过平均日期的 UNIX 时间戳等效值然后转换回日期来找到. 这个平均值不必完全正确!)。 输出应该是:
id | group | birthdate | [sort_by_birthdate]
---+-------+------------+--------------------
4 | NULL | 1985-09-29 | 1985-09-29
3 | 1 | 1987-05-25 | 1988-08-30
1 | 1 | 1989-12-07 | 1988-08-30
5 | NULL | 1988-11-11 | 1988-11-11
2 | NULL | 1990-03-14 | 1990-03-14
有什么想法吗?
干杯, 乔恩
【问题讨论】:
-
那么您想按同一组中生日的平均值排序吗?如果您的示例中某人的生日为
1988-08-30,我不确定您的订单是否会保留 -
我希望拥有
1988-08-30的人会在组之前或之后...我意识到这对于纯 SQL 来说是一件棘手的事情,但我想我会问以防万一=) -
你不能只按组排序,生日吗?
-
不,这是行不通的,因为我希望按出生日期与其他结果半排序,而不是自己结束
标签: mysql sql sorting grouping