在mysql中使用DATE\u格式进行分组

在mysql中使用DATE\u格式进行分组,mysql,sql,Mysql,Sql,我正在Mysql中编写一个SQL查询,其中结果应按ID和日期分组。日期是动态确定的,可以是一个简单的datetime字段,也可以是年、月或周的组合。请参见下面的查询,了解年度中的一周情况 SELECT t.transactionId, t.transactionDate, t.transactionProcessDate, t.status, t.type, t.versionId, t.note, WEEKOFYEAR(t.transactionDate) as CW, YEAR(t.tr

我正在Mysql中编写一个SQL查询,其中结果应按ID和日期分组。日期是动态确定的,可以是一个简单的datetime字段,也可以是年、月或周的组合。请参见下面的查询,了解年度中的一周情况

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\u格式生成的字段分组是否存在问题,这可能导致返回的查询无法重新组织重复项?

我想从查询中完全排除CW和yr这两个字段,因为它们仅用于分组。

更新了首先,很难说看不到您的真实数据,但是
按日期分组\u格式(t.transactionDate,%Y-%u')
效果很好

SELECT transactionId, 
       DATE_FORMAT(transactionDate, '%Y-%u') tDate
       ...
  FROM transaction
 WHERE status IN('A', 'N') 
 GROUP BY transactionId, tDate
这里是


旁注:即使MySql允许在
SELECT
中指定一个不属于
groupby
的字段(在您的例子中是t.status、t.type等),这也不是一件好事。您需要对该字段应用聚合函数(
MAX
MIN
…)。当您使用
分组方式时,无法确定要获取该字段的哪个值。您是否尝试过
分组方式t.transactionId,t.transactionDate
?您使用的是哪一版本的MySQL?@aw这将不起作用,因为交易日期可能不同。@markbanister我目前不在我的电脑上,但它至少应该是5.1。这只是将CW和yr别名移到GROUP BY语句中。@Awemo您能以表格形式发布相关样本数据吗?@Awemo请查看更新的答案。如果您提供样本数据,我们可以解决您的问题。