복붙노트

[SQL] MySQL의 등가 generate_series ()

SQL

MySQL의 등가 generate_series ()

나는 쿼리를 할 필요가 올해의 모든 일에 참여하지만 내 DB에 달력 테이블이 없다. 구글 - 보내고 후에 나는 PostgreSQL을에 generate_series ()를 발견했다. 합니까 MySQL은 비슷한 아무것도?

내 실제 테이블과 같은 뭔가가 :

date     qty
1-1-11    3
1-1-11    4
4-1-11    2
6-1-11    5

하지만 내 쿼리 반환에있다 :

1-1-11    7
2-1-11    0
3-1-11    0
4-1-11    2
and so on ..

해결법

  1. ==============================

    1.이것은 내가 그것을 할 방법이다. 그것은 2011-01-01부터 2011-12-31까지 날짜 범위를 만듭니다

    이것은 내가 그것을 할 방법이다. 그것은 2011-01-01부터 2011-12-31까지 날짜 범위를 만듭니다

    select 
        date_format(
            adddate('2011-1-1', @num:=@num+1), 
            '%Y-%m-%d'
        ) date
    from 
        any_table,    
        (select @num:=-1) num
    limit 
        365
    
    -- use limit 366 for leap years if you're putting this in production
    

    유일한 요구 사항은 any_table의 행수가 커야 또는 필요한 범위 (이 예에서는> = 365 행)의 크기가 동일해야한다는 것이다. 당신은 대부분 해당 쿼리에서 사용하는 테이블 중 하나가 될 수있는 경우 any_table 그렇게, 전체 쿼리의 하위 쿼리로 사용됩니다.

  2. ==============================

    2.나는이 솔루션에 있지만, "하드 코딩"날짜없이보고 있었다, 나는 온 - 업 (이 답변에서 도움) 현재 년간 유효이 하나. 을 유의하시기 바랍니다

    나는이 솔루션에 있지만, "하드 코딩"날짜없이보고 있었다, 나는 온 - 업 (이 답변에서 도움) 현재 년간 유효이 하나. 을 유의하시기 바랍니다

    where year(date)=2011
    

    선택으로 필요하지 않은 것은 이미 날짜를 필터링 할 수 있습니다. 또한,이 방법은 그 날짜에 런타임 "계산"으로된다 (표는 적어도 366 행하기 전에 적어도 한 바와 같이) 사용되는 테이블을 중요하지 않다.

     select date from (
        select
            date_format(
            adddate(MAKEDATE(year(now()),1), @num:=@num+1),
            '%Y-%m-%d'
        ) date
        from
            your_table,
        (select @num:=-1) num
        limit
            366 ) as dt
    
  3. ==============================

    3.이 (윤년 포함) 해 작동을 보장 @Karolis에서 솔루션의 버전을 강화 :

    이 (윤년 포함) 해 작동을 보장 @Karolis에서 솔루션의 버전을 강화 :

    select date from (
        select
            date_format(
            adddate('2011-1-1', @num:=@num+1),
            '%Y-%m-%d'
        ) date
        from
            any_table,
        (select @num:=-1) num
        limit
            366
    ) as dt
    where year(date)=2011
    
  4. from https://stackoverflow.com/questions/6870499/generate-series-equivalent-in-mysql by cc-by-sa and MIT license