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


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.