[英]MySQL count elements and group by date, ignore time
我有一个存储支付交易的表。 它们以这种方式与日期时间一起存储:
day-month-year hour:min:sec (Example: 18-11-2019 11:54:41)
我想计算每天有多少交易。
如果我使用这个查询:
SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY paid
它每一行都返回我,但我想按日期分组,忽略时间。
如果您的列在实际DATETIME
,则DATE
函数应该执行以下操作:
SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(paid)
如果它是具有自定义格式的VARCHAR
或TEXT
,例如您指定的示例 ( 18-11-2019 11:54:41
),您需要先使用STR_TO_DATE
解析它:
SELECT COUNT(id), paid FROM `payments` WHERE paid IS NOT NULL GROUP BY DATE(STR_TO_DATE(paid, '%d-%m-%Y %H:%i:%s'))
您应该始终使用DATETIME
列格式来存储日期,而不是VARCHAR
。 您始终可以在应用程序层中处理表示问题(例如转换为欧洲格式)。 如果是这种情况,您可以简单地按GROUP BY DATE(paid)
即
SELECT COUNT(id), paid
FROM `payments`
WHERE paid IS NOT NULL
GROUP BY DATE(paid)
如果您的列是VARCHAR
或TEXT
您需要将其转换为可以分组的值。 如果格式是DD-MM-YYYY
,您可以简单地使用LEFT(paid, 10)
来提取日期部分并按其分组,即
SELECT COUNT(id), paid
FROM `payments`
WHERE paid IS NOT NULL
GROUP BY LEFT(paid, 10)
如果您将日期存储为DM-YYYY
,则需要使用STR_TO_DATE
转换它们,例如
SELECT COUNT(id), paid
FROM `payments`
WHERE paid IS NOT NULL
GROUP BY STR_TO_DATE(paid, '%e-%c-%Y')
请注意,您可以在转换时忽略值的时间部分,从而避免使用DATE
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.