有一个表,列如下: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