我在Mysql中编写SQL查询,其结果应按ID和日期进行分组。日期是动态确定的,可以是简单的日期时间字段,也可以是年份,月份或年份的组合。请参阅下面的查询,查看一年中的一周案例;
SELECT t.transactionId, t.transactionDate, t.transactionProcessDate,
t.status, t.type, t.versionId, t.note, WEEKOFYEAR(t.transactionDate) as CW,
YEAR(t.transactionDate) as yr, (DATE_FORMAT(t.transactionDate, '%Y-%u')) as tDate
FROM transaction t
WHERE (t.status = 'A' or t.status = 'N')
GROUP BY t.transactionId , tDate
我遇到的问题是尝试按tDate进行分组,
GROUP BY t.transactionId , tDate
返回具有相同日期的重复项。
当我通过CW和yr字段将查询更改为分组时,
GROUP BY t.transactionId , CW, yr
我得到了预期的结果,没有重复。
问题:DATE_FORMAT
生成的字段分组是否有问题,可能导致返回的查询无法重复记录?
我想从查询中完全排除CW和yr这两个字段,因为它们仅用于分组。
答案 0 :(得分:2)
更新首先,很难说没有看到您的真实数据,但GROUP BY DATE_FORMAT(t.transactionDate, '%Y-%u')
工作得很好
SELECT transactionId,
DATE_FORMAT(transactionDate, '%Y-%u') tDate
...
FROM transaction
WHERE status IN('A', 'N')
GROUP BY transactionId, tDate
这是 SQLFiddle
旁注:即使MySql允许在SELECT
中指定一个不属于GROUP BY
的字段(在您的情况下为t.status,t.type等) {1}}这不是一件好事。您需要将聚合函数应用于该字段(MAX
,MIN
...)。当您执行GROUP BY