문제

쉬운 방법이 있습니까? GROUP BY DATE(timestamp) 여기에는 해당 날짜와 관련된 기록이 있는지 여부에 관계없이 일정 기간 내내 하루 종일 포함됩니다.

기본적으로 다음과 같은 보고서를 생성해야합니다.

24 Dec - 0 orders
23 Dec - 10 orders
22 Dec - 8 orders
21 Dec - 2 orders
20 Dec - 0 orders
도움이 되었습니까?

해결책

그룹을 사용하는 대신 원하는 특정 날짜가 포함 된 테이블 (아마도 임시 테이블)을 만드십시오.

24 Dec
23 Dec
22 Dec
21 Dec
20 Dec

그런 다음 해당 테이블을 주문 테이블에 가입하십시오.

다른 팁

이와 같은 날짜보다 더 많은 주문이 있다고 가정하면 다음과 같이 작동 할 수 있습니다.

select date, count(id) as orders
from
(
  SELECT DATE_ADD('2008-01-01', INTERVAL @rn:=@rn+1 DAY) as date from (select @rn:=-1)t, `order` limit 365
) d left outer join `order` using (date)
group by date

한 가지 방법은 캘린더 테이블을 만들고 이에 대한 결합하는 것입니다.

영구적으로 만들어 내고 새로운 날짜를 삽입하는 작업을 만들고 매주, 매일, 매월 등을 수행 할 수 있습니다.

타임 스탬프를 날짜로 변환한다고 가정합니다.

출력에 포함시키려는 모든 날짜와 함께 중간 결과 세트를 생성해야합니다 ...

저장된 Proc 에서이 작업을 수행하는 경우 임시 테이블 또는 테이블 변수를 만들 수 있습니다 (MySQL의 기능을 수행하지 않음).

외부 조인을 사용하여 온도 테이블에서 실제 데이터에 가입하십시오.

SQL Server에서는 다음과 같습니다

  Declare @Dates Table (aDate DateTime Not Null)
  Declare @StartDt DateTime Set @StartDt = 'Dec 1 2008'
  Declare @EndDt   DateTime Set @EndDt   = 'Dec 31 2008'
  While @StartDt < @EndDt Begin
    Insert @Dates(aDate) Values(@StartDt)
    Set @StartDt = DateAdd(Day, 1, @StartDt)
  End

   Select D.aDate, Count(O.*) Orders
   From @Dates D Left Join 
      OrderTable O On O.OrderDate = D.aDate
   Group By D.aDate

데이터웨어 하우스에서 취한 방법은 모든 날짜를 포함하는 테이블을 만들고 데이터와 날짜 테이블 사이에 외국 키를 생성하는 것입니다. 나는 이것이 당신의 경우에 가장 좋은 방법이라고 말하는 것이 아닙니다. 단지 많은 양의 데이터를보고 목적으로 여러 가지 방법으로 롤업 해야하는 경우 모범 사례라고 말합니다.

SQL Server를 통해보고 계층을 사용하는 경우 데이터가 반환 된 후 및 보고서를 렌더링하기 전에 관심 범위 내에서 누락 된 날짜를 삽입하는 논리를 작성할 수 있습니다.

SQL Server에서 직접 보고서를 작성하고 이미 데이터웨어 하우스가없고 지금 당장 작성해야 할 시간이 없거나 날짜 테이블을 만들어 가입합니다. 가입을 수행하고 원하는 출력을 얻는 데 필요한 서식은 약간 원래가 될 수 있지만 작업이 완료됩니다.

이 작업을 수행하는 매우 간단한 방법이 있습니다. 그러나이 쿼리를 조정했습니다 이 스레드:

SELECT 
    DISTINCT(LEFT(date_field,11)) AS `Date`,
    COUNT(LEFT(date_field,11)) AS `Number of events`
FROM events_table
GROUP BY `Date`

MySQL에서도 작동합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top