繁体   English   中英

MySQL-GROUP BY的替代品,没有聚合功能?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM