집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 지연 기능을 시뮬레이션하는 방법은 무엇입니까?
MySQL에서 LAG 기능 시뮬레이션
MySQL은 일반적으로 현재 행 값과 이전 행 값의 차이를 계산하는 데 사용되는 LAG() 함수를 기본적으로 지원하지 않습니다. 그러나 MySQL 변수를 사용하면 이 문제를 깔끔하게 해결할 수 있습니다.
제공된 예제 데이터세트를 살펴보겠습니다.
<code>| 时间 | 公司 | 报价 | +---------------------+---------+-------+ | 0000-00-00 00:00:00 | GOOGLE | 40 | | 2012-07-02 21:28:05 | GOOGLE | 60 | | 2012-07-02 21:28:51 | SAP | 60 | | 2012-07-02 21:29:05 | SAP | 20 |</code>
LAG() 함수를 시뮬레이션하려면 다음 쿼리를 사용할 수 있습니다.
<code class="language-sql">SET @quot = -1; SELECT time, company, @quot AS lag_quote, @quot := quote AS curr_quote FROM stocks ORDER BY company, time;</code>
이 쿼리는 MySQL 변수 @quot
를 사용하여 이전 행의 인용된 값을 저장합니다. 현재 행의 인용 값을 curr_quote
에 할당하면 둘 사이의 차이를 계산할 수 있습니다.
결과:
<code>| 时间 | 公司 | lag_quote | curr_quote | +---------------------+---------+----------+-----------+ | 0000-00-00 00:00:00 | GOOGLE | -1 | 40 | | 2012-07-02 21:28:05 | GOOGLE | 40 | 60 | | 2012-07-02 21:28:51 | SAP | -1 | 60 | | 2012-07-02 21:29:05 | SAP | 60 | 20 |</code>
원하는 출력 형식을 얻으려면:
<code>GOOGLE | 20 SAP | 40</code>
다음 쿼리를 사용하세요.
<code class="language-sql">SET @quot = 0, @latest = 0, @comp = ''; SELECT B.* FROM ( SELECT A.time, A.change, IF(@comp = A.company, 1, 0) AS LATEST, @comp := A.company AS company FROM ( SELECT time, company, quote - @quot AS change, @quot := quote AS curr_quote FROM stocks ORDER BY company, time ) A ORDER BY company, time DESC ) B WHERE B.LATEST = 1;</code>
결과:
<code>| 时间 | 公司 | change | +---------------------+---------+-------+ | 2012-07-02 21:28:05 | GOOGLE | 20 | | 2012-07-02 21:29:05 | SAP | -40 |</code>
두 번째 쿼리 결과에서 SAP의 변경 값이 40이 아닌 -40이라는 점에 유의하시기 바랍니다. 이는 원문의 결과와 일치하지 않으며, 원문의 두 번째 쿼리에 문제가 있을 수 있습니다. 위의 코드는 이 오류를 수정하고 LAG 함수의 동작을 더 정확하게 시뮬레이션합니다.
위 내용은 MySQL에서 지연 기능을 시뮬레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!