시간을 고려하지 않고 날짜 시간 열별로 그룹화하는 방법


221

제품 주문이 많으며 날짜별로 그룹화하고 해당 날짜의 수량을 합산하려고합니다. 시간을 고려하지 않고 월 / 일 / 년으로 그룹화하려면 어떻게해야합니까?

3/8/2010 7:42:00 와 그룹화해야합니다 3/8/2010 4:15:00


답변:


374

값을 Date사용자 그룹 의 유형으로 캐스트 / 변환 합니다 .

GROUP BY CAST(myDateTime AS DATE)

3
LINQ to SQL과 어떻게 동일하게 작동하는지 알고 있습니까?
— 머핀 맨

1
@ 닉-확실하지 않습니다. 를 사용해보십시오 DateTime.Date.
— Oded

3
-Linq to Sql : DateTime.Date-엔티티 프레임 워크 :EntityFunctions.TruncateTime(myDateTime)
— 머핀 맨

1
나는 ORM과 관련하여 질문을 한 The Muffin Man에 응답하고 있음에 동의합니다.
— Niels Brinch

4
고마워 ... 내 문제를 해결했다. 'CAST (date_modified AS DATE)'에 의해 그룹을 추가했습니다. 선택된 cluase에 동일한 (CAST (date_modified AS DATE))을 추가하는 것을 잊지 마십시오.
— Mohammed mansoor

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

또는 SQL Server 2008 부터는 Date @Oded가 제안한대로 간단히 캐스팅 할 수 있습니다 .

GROUP BY CAST(orderDate AS DATE)



2

다음은 시간 부분이없는 특정 날짜의 레코드 수를 계산해야 할 때 사용한 예입니다.

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는 날짜로 취급하지 않으므로 날짜별로 정렬되지 않으므로 예상대로 작동하지 않습니다.
— 무기 X

2

다음은 오라클에서 잘 작동하는 예입니다.

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

2

CAST 날짜 / 시간 필드

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

0

나는 당신이 그 달의 그 날에 그룹화해야한다고 생각합니다. TRUNK_DATE 함수를 사용하지 않는 이유는 무엇입니까? 작동 방식은 다음과 같습니다.

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

date_trunc는 SQL Server가 아닌 PostgreSQL의 경우 태그로 이동하며 OP는 SQL 서버에 대한 솔루션을 찾고있었습니다.
— 데이브 호건
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.