0

我正在 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 这两个字段,因为它们仅用于分组。

4

1 回答 1

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 允许指定一个字段(在您的情况下为 t.status、t.type 等),SELECT这不是GROUP BY它的一部分,但这不是一件好事。您需要将聚合函数应用于该字段(MAXMIN...)。当你这样做时,没有办法确定地告诉你要抓取这样一个字段的哪个值GROUP BY

于 2013-05-23T08:51:33.480 回答