在mysql中使用DATE\u格式进行分组
我正在Mysql中编写一个SQL查询,其中结果应按ID和日期分组。日期是动态确定的,可以是一个简单的datetime字段,也可以是年、月或周的组合。请参见下面的查询,了解年度中的一周情况在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
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请查看更新的答案。如果您提供样本数据,我们可以解决您的问题。