有一个表,列如下:mydate DATETIME…
我有一个查询,如:
SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;
这将根据完整的日期时间进行分组,包括小时和分钟。我希望只按日期YYYY/MM/DD分组,而不是按YYYY/MM/DD/HH/ MM分组。
如何做到这一点?
有一个表,列如下:mydate DATETIME…
我有一个查询,如:
SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;
这将根据完整的日期时间进行分组,包括小时和分钟。我希望只按日期YYYY/MM/DD分组,而不是按YYYY/MM/DD/HH/ MM分组。
如何做到这一点?
将datetime转换为日期,然后使用以下语法进行GROUP BY:
SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate);
或者你可以按照@orlandu63的建议分组:
SELECT SUM(foo), DATE(mydate) DateOnly FROM a_table GROUP BY DateOnly;
虽然我不认为它会对性能产生任何影响,但它会更清晰一些。
Or:
SELECT SUM(foo), DATE(mydate) mydate FROM a_table GROUP BY mydate;
更有效率(我认为)。因为你不必每行强制执行两次mydate。
SELECT SUM(No), HOUR(dateofissue)
FROM tablename
WHERE dateofissue>='2011-07-30'
GROUP BY HOUR(dateofissue)
它会给出从某一天开始的时间总和!
我发现我需要按月和年进行分组,所以以上两种方法都不适合我。相反,我使用date_format
SELECT date
FROM blog
GROUP BY DATE_FORMAT(date, "%m-%y")
ORDER BY YEAR(date) DESC, MONTH(date) DESC
这对我很有效
select
CONVERT(date, CONVERT(VARCHAR(10),sd.Date,112)) as Date,
sd.CodId as CodId,
p.Description ,
sum(sd.Quantity)as Quantity,
sum(sd.TotalQuantityXPriceWithIva) as TotalWithIva
from
SaleDetails sd
join Sales s on sd.SaleId = s.SaleId
join Products p on sd.ProductId = p.ProductId
Where
(
sd.Date >=' 1/1/2021 00:00:00'
and sd.Date <= '26/10/2021 23:59:59'
and p.BarCode = '7790628000034'
and ((s.VoucherTypeId >= 16 and s.VoucherTypeId <= 18)
or s.VoucherTypeId = 32 ))
group by
CONVERT(VARCHAR(10),sd.Date,112),
sd.CodId ,
p.Description
order by CONVERT(VARCHAR(10),sd.Date,112) desc