°­ÁÂ¿Í ÆÁ

LAG, LEAD ÇÔ¼ö·Î ¾ÕµÚÀÇ Çà Àб⠳¯Â¥:2020-6-15 12:00:02 Á¶È¸¼ö:167
ÀÛ¼ºÀÚ : ¼Ò¿£
Æ÷ÀÎÆ® : 1459
°¡ÀÔÀÏ : 2020-02-02 00:09:14
¹æ¹®È½¼ö : 89
±Û 192°³, ´ñ±Û 57°³
¼Ò°³ : SoEn ¿î¿µÀÚÀÔ´Ï´Ù.
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
LAG, LEAD´Â ¾ÕµÚ ÇàÀÇ °ªÀ» Àд ÇÔ¼öÀÌ´Ù. SELECT¹®Àº ÇÑÇ྿ ¼ø¼­´ë·Î Àд °ÍÀÌ º¸ÆíÀûÀε¥ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é °á°ú¼ÂÀÇ ÀÌÀü, ÀÌÈÄÇàÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ¿À¶óŬµµ Áö¿øÇÏ´Â ÇÔ¼öÀ̸ç MSSQLÀº 2012ºÎÅÍ Áö¿øÇϱ⠽ÃÀÛÇß´Ù. Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
 
LAG(Çʵå, offset, default) OVER (PARTITION BY ORDER BY)
 
LAG ÇÔ¼ö´Â ÀÌÀü ÇàÀ» Àаí LEAD ÇÔ¼ö´Â ´ÙÀ½ÇàÀ» Àд´Ù. °ýÈ£¾È¿¡ ÀÐÀ» Çʵ带 ÁöÁ¤Ç쵂 ´ÜÀϰªÀ» ¸®ÅÏÇÏ´Â ¼ö½Äµµ °¡´ÉÇÏ´Ù. offsetÀº ¾ÕµÚ·Î ¸î Çà °Å¸®¸¦ ÀÐÀ» °ÍÀÎÁö¸¦ ÁöÁ¤ÇÏ¸ç »ý·«½Ã 1ÀÌ Àû¿ëµÇ¾î ¹Ù·Î ¾Õ µÚÀÇ ÇàÀ» Àд´Ù. offset¿¡ À½¼ö¸¦ ÁöÁ¤ÇÒ ¼ö´Â ¾ø¾î ¾ÕµÚ¸¦ Àд ÇÔ¼ö°¡ ³ª´©¾îÁ® ÀÖ´Ù. default´Â ÇàÀÌ ¾øÀ» ½Ã ´ë½Å ÀÐÀ» °ªÀÌ¸ç µðÆúÆ®´Â NULLÀÌ´Ù.
¾Õ µÚÀÇ ÇàÀ» ±ÔÁ¤ÇÏ·Á¸é Á¤·ÄÀº ÇʼöÀûÀ̾ OVER Àý¿¡ ORDER BY°¡ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÑ´Ù. PARTITION BY´Â ±×·ìÀ» ³ª´­ ÆÄƼ¼ÇÀ» ÁöÁ¤ÇÏ¸ç »ý·« °¡´ÉÇÏ´Ù. Å×½ºÆ®¸¦ À§ÇØ ´ÙÀ½ »ùÇà Å×À̺íÀ» »ý¼ºÇÏÀÚ.
 

CREATE TABLE tMonthSale
(
     year INT,
     month INT,
     sales  INT
)
 
INSERT INTO tMonthSale VALUES(2021, 1, 3800);
INSERT INTO tMonthSale VALUES(2021, 2, 4200);
INSERT INTO tMonthSale VALUES(2021, 3, 4150);
INSERT INTO tMonthSale VALUES(2021, 4, 4380);
INSERT INTO tMonthSale VALUES(2021, 5, 4600);
INSERT INTO tMonthSale VALUES(2021, 6, 3700);
INSERT INTO tMonthSale VALUES(2021, 7, 3330);
INSERT INTO tMonthSale VALUES(2021, 8, 2900);
INSERT INTO tMonthSale VALUES(2021, 9, 3650);
INSERT INTO tMonthSale VALUES(2021, 10, 4120);
INSERT INTO tMonthSale VALUES(2021, 11, 5000);
INSERT INTO tMonthSale VALUES(2021, 12, 4420);
 
¿ùº° ¸ÅÃâÀ» Åë°è¸¦ ÀúÀåÇÏ´Â Å×À̺íÀÌ´Ù. SELECT¹®À¸·Î ÆòÀÌÇÏ°Ô ÀÐÀ¸¸é ¿ùº° ¸ÅÃâ¾×ÀÌ Ãâ·ÂµÈ´Ù. ¿©±â¿¡ ÀÌÀü¿ù°ú ÀÌÈÄ¿ùÀÇ ¸ÅÃâ±îÁö ÇÑÇà¿¡ Ãâ·ÂÇÏ·Á¸é LAG, LEAD ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
 
SELECT year, month, sales,
             LAG(sales, 1, NULL) OVER (ORDER by month) AS prior,
             LEAD(sales, 1, NULL) OVER (ORDER by month) AS next
FROM tMonthSale;
 
LAG ÇÔ¼ö´Â 1°³¿ù ÀüÀÇ ¸ÅÃâÀ» º¸¿© ÁÖ°í LEAD ÇÔ¼ö´Â 1°³¿ù ÈÄÀÇ ¸ÅÃâÀ» º¸¿©ÁØ´Ù. offsetÀ» 2·Î ÁöÁ¤Çϸé 2°³¿ù ÀüÈÄÀÇ ¸ÅÃâÀ» º¼ ¼öµµ ÀÖÁö¸¸ º¸ÅëÀº ÀÎÁ¢ÇàÀÇ °ªÀ» º¸´Â °æ¿ì°¡ ¸¹´Ù. ù´ÞÀº ÀÌÀüÀÌ ¾ø°í ¸¶Áö¸·´ÞÀº ÀÌÈİ¡ ¾ø´Âµ¥ À̶§´Â µðÆúÆ®·Î ÁöÁ¤ÇÑ NULLÀÌ Ãâ·ÂµÈ´Ù. 1, NULLÀº µÑ ´Ù µðÆúÆ®¿©¼­ »ý·«Çصµ »ó°ü ¾ø´Ù. µÎ °æ¿ì ¸ðµÎ Á¤·ÄÀº ¹Ýµå½Ã ÇÊ¿äÇØ ¿ùº°·Î Á¤·ÄÇÑ ÈÄ ¾ÕµÚÇàÀ» ã´Â´Ù.

3¿ùÀÇ prior ¿­¿¡´Â 2¿ùÀÇ ¸ÅÃâÀÌ Ç¥½ÃµÇ°í next¿­¿¡´Â 4¿ùÀÇ ¸ÅÃâÀÌ Ç¥½ÃµÈ´Ù. ¹Ù·Î ¾Æ·¡, À§¿¡µµ ÀÖÁö¸¸ ¿·À¸·Î ³ª¶õÈ÷ º¸¿©ÁÖ´Ï ÀÐ±â ÆíÇÏ´Ù.

1¿ùÀÇ ÀÌÀü´ÞÀ̳ª 12¿ùÀÇ ÀÌÈÄ´ÞÀº °á°ú¼Â¿¡ Æ÷ÇÔµÇÁö ¾Ê¾Æ NULL·Î Ç¥½ÃµÈ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÀÌÀü´Þ°ú ºñ±³ÇÏ¿© À̹ø´Þ ¸ÅÃâÀÌ ¾ó¸¶³ª ´Ã¾î³µ´ÂÁö ±Ý¹æ Á¶»çÇÒ ¼ö ÀÖ´Ù.
 
SELECT year, month, sales,
             sales - LAG(sales) OVER (ORDER by month) AS incsales
FROM tMonthSale;
 
LAG(sales) ±¸¹®À¸·Î ÀÌÀü´Þ ¸ÅÃâÀ» ±¸Çϰí À̹ø´Þ ¸ÅÃâ¿¡¼­ ÀÌ °ªÀ» »©¸é ¸ÅÃâ Áõ°¡¾×ÀÌ´Ù. ÇöÀç°ª»Ó¸¸ ¾Æ´Ï¶ó °ªÀ» Áõ°¨ºÐÀ» »Ì¾Æº¼ ¶§ À¯¿ëÇÏ´Ù.

ÀÌ ±â´ÉÀÌ µµÀԵDZâ Àü¿¡´Â ÀÚü Á¶ÀÎÀ̳ª CTE °°Àº °í±Þ ±â¹ýÀ» µ¿¿øÇØ¾ß ÇßÁö¸¸ Áö±ÝÀº °£´ÜÇÑ ¼ö½ÄÀ¸·Î ÀÌÀü, ÀÌÈÄÇàÀ» Á¶»çÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù. ³»ºÎÀûÀÎ °Ë»ö ¹× ¿¬»êÀ» DBMS°¡ ¾Ë¾Æ¼­ ó¸®ÇØ ÁÖ´Ï ¼Óµµµµ ÈξÀ ´õ ºü¸£´Ù.

 



°³¹ßÀÚÀÇ Ãµ±¹ SoEn

¸ñ·Ïº¸±â »èÁ¦ ¼öÁ¤ ½Å°í ½ºÅ©·¦


·Î±×ÀÎÇÏ¼Å¾ß ´ñ±ÛÀ» ´Þ ¼ö ÀÖ½À´Ï´Ù.