[SQL] MySQL의 등가 generate_series ()
SQLMySQL의 등가 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.이것은 내가 그것을 할 방법이다. 그것은 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.나는이 솔루션에 있지만, "하드 코딩"날짜없이보고 있었다, 나는 온 - 업 (이 답변에서 도움) 현재 년간 유효이 하나. 을 유의하시기 바랍니다
나는이 솔루션에 있지만, "하드 코딩"날짜없이보고 있었다, 나는 온 - 업 (이 답변에서 도움) 현재 년간 유효이 하나. 을 유의하시기 바랍니다
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.이 (윤년 포함) 해 작동을 보장 @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
from https://stackoverflow.com/questions/6870499/generate-series-equivalent-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] dplyr left_join 이하,보다 의해 조건보다 (0) | 2020.03.22 |
---|---|
[SQL] 오라클 SQL에서 작은 따옴표를 처리하는 방법 (0) | 2020.03.22 |
[SQL] MS SQL 서버에서 테이블 예약 된 단어 이름 / 키워드 만들기 [마감] (0) | 2020.03.22 |
[SQL] 당신은 어떻게 SQL Server 테이블의 기본 키를 나열합니까? (0) | 2020.03.22 |
[SQL] IN 절을 매개 변수화를위한 JDBC를 사용하는 가장 좋은 방법은 무엇입니까? [복제] (0) | 2020.03.22 |