사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:응용:calendar_query

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:응용:calendar_query [2025/04/09 20:29]
carlito76
기술문서:레퍼런스:쿼리:응용:calendar_query [2026/06/19 17:13] (현재)
carlito76
줄 5: 줄 5:
  
 ====== Calendar Query ====== ====== Calendar Query ======
 +
 +<note tip>
 +최소 지원 버전은 약간의 차이가 있을 수 있습니다.\\
 +- MySQL/MariaDB, PostgreSQL: 세부 버전까지 표시\\
 +- MSSQL, Oracle/Tibero: 제품 버전까지 표시
 +</note>
  
 ===== MySQL/MariaDB ===== ===== MySQL/MariaDB =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MySQL 5.0.1 이상+/* 
 + MySQL 5.0.1 이상/MariaDB 5.1 이상 
 +*/
 SELECT SELECT
- MIN(CASE WHEN week = 1 THEN dt END) AS sun + MAX(CASE WHEN week = 1 THEN dt END) AS sun 
- , MIN(CASE WHEN week = 2 THEN dt END) AS mon + , MAX(CASE WHEN week = 2 THEN dt END) AS mon 
- , MIN(CASE WHEN week = 3 THEN dt END) AS tue + , MAX(CASE WHEN week = 3 THEN dt END) AS tue 
- , MIN(CASE WHEN week = 4 THEN dt END) AS wed + , MAX(CASE WHEN week = 4 THEN dt END) AS wed 
- , MIN(CASE WHEN week = 5 THEN dt END) AS thu + , MAX(CASE WHEN week = 5 THEN dt END) AS thu 
- , MIN(CASE WHEN week = 6 THEN dt END) AS fri + , MAX(CASE WHEN week = 6 THEN dt END) AS fri 
- , MIN(CASE WHEN week = 7 THEN dt END) AS sat+ , MAX(CASE WHEN week = 7 THEN dt END) AS sat
 FROM FROM
  (SELECT  (SELECT
줄 26: 줄 34:
  (SELECT  (SELECT
  DATE_ADD(a, INTERVAL b DAY) AS dt  DATE_ADD(a, INTERVAL b DAY) AS dt
 + , a
  FROM  FROM
  (SELECT  (SELECT
줄 42: 줄 51:
  ) cal  ) cal
  WHERE  WHERE
- dt <= LAST_DAY(dt)+ dt <= LAST_DAY(a)
  ) cal  ) cal
 GROUP BY GROUP BY
줄 53: 줄 62:
 ===== MSSQL ===== ===== MSSQL =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MSSQL 2000 이상+/* 
 + MSSQL 2000 이상 
 +*/
 SELECT SELECT
- MIN(CASE WHEN week = 1 THEN dt END) AS sun + MAX(CASE WHEN week = 1 THEN dt END) AS sun 
- , MIN(CASE WHEN week = 2 THEN dt END) AS mon + , MAX(CASE WHEN week = 2 THEN dt END) AS mon 
- , MIN(CASE WHEN week = 3 THEN dt END) AS tue + , MAX(CASE WHEN week = 3 THEN dt END) AS tue 
- , MIN(CASE WHEN week = 4 THEN dt END) AS wed + , MAX(CASE WHEN week = 4 THEN dt END) AS wed 
- , MIN(CASE WHEN week = 5 THEN dt END) AS thu + , MAX(CASE WHEN week = 5 THEN dt END) AS thu 
- , MIN(CASE WHEN week = 6 THEN dt END) AS fri + , MAX(CASE WHEN week = 6 THEN dt END) AS fri 
- , MIN(CASE WHEN week = 7 THEN dt END) AS sat+ , MAX(CASE WHEN week = 7 THEN dt END) AS sat
 FROM FROM
  (SELECT  (SELECT
줄 93: 줄 104:
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- Oracle 8i 이상/Tibero 6 이상+/* 
 + Oracle 8i 이상/Tibero 4 이상 
 +*/
 SELECT SELECT
- MIN(DECODE(week, 1, dt)) AS sun + MAX(DECODE(week, 1, dt)) AS sun 
- , MIN(DECODE(week, 2, dt)) AS mon + , MAX(DECODE(week, 2, dt)) AS mon 
- , MIN(DECODE(week, 3, dt)) AS tue + , MAX(DECODE(week, 3, dt)) AS tue 
- , MIN(DECODE(week, 4, dt)) AS wed + , MAX(DECODE(week, 4, dt)) AS wed 
- , MIN(DECODE(week, 5, dt)) AS thu + , MAX(DECODE(week, 5, dt)) AS thu 
- , MIN(DECODE(week, 6, dt)) AS fri + , MAX(DECODE(week, 6, dt)) AS fri 
- , MIN(DECODE(week, 7, dt)) AS sat+ , MAX(DECODE(week, 7, dt)) AS sat
 FROM FROM
  (SELECT  (SELECT
줄 111: 줄 124:
  (SELECT  (SELECT
  TRUNC(SYSDATE, 'MM') AS dt  TRUNC(SYSDATE, 'MM') AS dt
- -- TO_DATE('20250101') AS dt+ -- TO_DATE('20250101', 'YYYYMMDD') AS dt
  FROM  FROM
  DUAL) cal  DUAL) cal
줄 126: 줄 139:
 ===== PostgreSQL ===== ===== PostgreSQL =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- PostgreSQL 8.0 이상+/* 
 + PostgreSQL 8.0 이상 
 +*/
 SELECT SELECT
- MIN(CASE WHEN week = 0 THEN dt END) AS sun + MAX(CASE WHEN week = 0 THEN dt END) AS sun 
- , MIN(CASE WHEN week = 1 THEN dt END) AS mon + , MAX(CASE WHEN week = 1 THEN dt END) AS mon 
- , MIN(CASE WHEN week = 2 THEN dt END) AS tue + , MAX(CASE WHEN week = 2 THEN dt END) AS tue 
- , MIN(CASE WHEN week = 3 THEN dt END) AS wed + , MAX(CASE WHEN week = 3 THEN dt END) AS wed 
- , MIN(CASE WHEN week = 4 THEN dt END) AS thu + , MAX(CASE WHEN week = 4 THEN dt END) AS thu 
- , MIN(CASE WHEN week = 5 THEN dt END) AS fri + , MAX(CASE WHEN week = 5 THEN dt END) AS fri 
- , MIN(CASE WHEN week = 6 THEN dt END) AS sat+ , MAX(CASE WHEN week = 6 THEN dt END) AS sat
 FROM FROM
  (SELECT  (SELECT
줄 163: 줄 178:
 ; ;
 </sxh> </sxh>
 +
 +{{tag>"쿼리" "Query" "응용"}}