Группировать по дате в SQL Server - PullRequest
4 голосов
/ 20 февраля 2012

У меня проблема с группировкой в ​​SQL Server.

У меня есть столбец datetime, но я хочу группировать только по дате,

Вот мой код

SELECT ProductCode,
       ProductName,
       ProductType,
       UnitPrice,QTY,
       Amount,
       (convert(varchar, TransactionDate, 101) )AS sTransactionDate
FROM DailyTransactions 
GROUP BY TransactionDate, ProductCode,
          ProductName,ProductType,UnitPrice,QTY,Amount

РЕЗУЛЬТАТ:

2/17/2012 появляется три раза, потому что у него разные времена ...

Ответы [ 5 ]

2 голосов
/ 20 февраля 2012

Проще говоря, ваш GROUP BY должен появиться где-то в вашем выборе. Вы уже конвертируете TransactionDate в строку «только для даты», хотя DATEADD и DATEDIFF вместе более эффективны.

Следовательно, просто GROUP BY в том же формате:

SELECT ProductCode,
       ProductName,
       ProductType,
       UnitPrice,QTY,
       Amount,
       DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0) AS sTransactionDate
FROM DailyTransactions 
GROUP BY DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0), ProductCode,
          ProductName,ProductType,UnitPrice,QTY,Amount
2 голосов
/ 20 февраля 2012

Это должен быть быстрый способ группировки результатов по дате:

SELECT  
   ProductCode,ProductName,ProductType,UnitPrice,QTY,Amount,(convert(varchar, TransactionDate, 101) )AS sTransactionDate
   FROM DailyTransactions 
   GROUP BY DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0), ProductCode,ProductName,ProductType,UnitPrice,QTY,Amount

В этом случае мы получаем разницу между началом дня и временем в дате, а затем удаляем ее.

2 голосов
/ 20 февраля 2012

Поскольку вы хотите отобразить только один результат, почему бы вам не использовать DISTINCT?

SELECT DISTINCT ProductCode, ...
FROM ...
GROUP BY ProductCode
2 голосов
/ 20 февраля 2012

Вы можете попробовать:

GROUP BY
  DATEPART(year, TransactionDate),
  DATEPART(month, TransactionDate),
  DATEPART(day, TransactionDate)
1 голос
/ 20 февраля 2012

Попробуйте применить CHAR (10) вместо varchar при применении конвертирования.Вы никогда не должны объявлять char / varchar без длины.В этом случае вы не усекаете достаточно символов, потому что это varchar (30), в то время как вы действительно заботитесь только о первых 10 символов.Кроме того, ваша группа должна включать идентичных конвертов.

...