Làm cách nào để nhóm theo cột thời gian mà không mất thời gian xem xét


221

Tôi có một loạt các đơn đặt hàng sản phẩm và tôi đang cố gắng nhóm theo ngày và tổng số lượng cho ngày đó. Làm cách nào tôi có thể nhóm theo tháng / ngày / năm mà không xem xét phần thời gian?

3/8/2010 7:42:00 nên được nhóm với 3/8/2010 4:15:00


2
Xem thêm nhóm
Michael Freidgeim

Câu trả lời:


374

Truyền / Chuyển đổi các giá trị thành một Dateloại cho nhóm của bạn bằng cách.

GROUP BY CAST(myDateTime AS DATE)

3
Bạn có biết làm thế nào tôi sẽ làm tương tự với LINQ to SQL không?
Người đàn ông Muffin

1
@Nick - không chắc chắn. Hãy thử sử dụng DateTime.Date.
Oded

3
- Linq to Sql: DateTime.Date- Khung thực thể:EntityFunctions.TruncateTime(myDateTime)
Người đàn ông Muffin

1
Tôi đồng ý, tôi đã trả lời Người đàn ông Muffin, người đang hỏi về nó trong bối cảnh ORM.
Niels Brinch

4
Cảm ơn rất nhiều ... nó đã giải quyết vấn đề của tôi. đã thêm 'nhóm theo CAST (date_modified AS DATE)'. đừng quên thêm cùng (CAST (date_modified AS DATE)) trong cluase chọn.
Mohammed mansoor

25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

Hoặc trong SQL Server 2008 trở đi, bạn có thể chỉ cần chuyển Date thành @Oded đề xuất:

GROUP BY CAST(orderDate AS DATE)

16

Trong Sql 2008 trước bằng cách lấy phần ngày:

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)

2
Để biết giải thích về chức năng chuyển đổi và loại thời gian ngày (nghĩa là char (8) và 10), hãy xem w3schools.com/sql/func_convert.asp
super1ha1


2

Đây là một ví dụ mà tôi đã sử dụng khi tôi cần đếm số lượng hồ sơ cho một ngày cụ thể mà không có phần thời gian:

select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
FROM dbo.tbltobecounted
GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
ORDER BY CONVERT(CHAR(10),dtcreatedate,103)

1
ORDER BY sẽ không hoạt động như được yêu cầu bởi vì nó sẽ không coi đó là ngày nên nó sẽ sắp xếp theo ngày
Weapon X

2

Dưới đây là ví dụ hoạt động tốt trong nhà tiên tri

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');

2

Trường thời gian CAST cho đến nay

select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);

0

Tôi tin rằng bạn cần phải nhóm theo, vào ngày đó trong tháng. vậy tại sao không sử dụng các hàm TRUNK_DATE. Cách thức hoạt động được mô tả dưới đây:

Group By DATE_TRUNC('day' , 'occurred_at_time')

date_trunc dành cho PostgreQuery chứ không phải SQL Server đi bằng thẻ, OP đang tìm giải pháp cho máy chủ SQL.
Dave Hogan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.