[英]MySQL - Alternative to GROUP BY without aggregate function?
想象一下一个无序表,其设置如下:
+----+------------+----------+-----------+
| ID | Project | Resource | StartDate |
+----+------------+----------+-----------+
| 1 | ExtraParts | Mark | 24/01 |
| 2 | ExtraParts | Sam | 22/01 |
| 3 | TimeLabour | Sally | 19/01 |
| 4 | TimeLabour | Sarena | 23/01 |
| 5 | Runway | Olly | 14/02 |
| 6 | Runway | Mary | 14/05 |
+----+------------+----------+-----------+
我想按最早的StartDate顺序订购每个项目,但仍将每个项目的资源归为一类(不知道即时通讯是否可以解释此权利,但以下是我想实现的目标)
+----+-------------+-----------+-----------+
| ID | Project | Resource | StartDate |
+----+-------------+-----------+-----------+
| 1 | TimeLabor | Sally | 19/01 |
| 2 | TimeLabor | Sarena | 23/01 |
| 3 | ExtraParts | Sam | 22/01 |
| 4 | ExtraParts | Mark | 24/01 |
| 5 | Runway | Olly | 14/02 |
| 6 | Runway | Mary | 14/05 |
+----+-------------+-----------+-----------+
如果我执行ORDER BY StartDate,Project,那么结果将使项目变得混乱。 如果我按项目ORDER BY Project,StartDate,则结果将首先按项目按字母顺序排序,然后按同一项目内的日期按日期排序(如果有意义)。 如上所述,我想在每个项目最早的StartDate之前进行订购,同时仍将项目分组在一起(而不是汇总分组,仅在另一个分组之下)。
任何帮助是极大的赞赏! :)
这样的东西? SQL FIDDLE玩
SELECT project, resource, startdate
FROM testing
ORDER BY project, STR_TO_DATE(StartDate, '%d/%m')
基本上,您的表将日期存储为字符串,并且为了将其排序,您需要将字符串转换为可识别的日期...因此STR_TO_DATE()是一种实现此目的的方法:)
您需要计算订购日期:
select t.*
from table t join
(select project, min(startdate) as minsd
from table t
group by project
) tp
on t.project = tp.project
order by tp.minsd, t.project;
注意:这假设startdate
实际上存储为日期而不是字符串。 如果将其存储为字符串,则应首先将其转换为日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.