>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 지연 기능을 시뮬레이션하는 방법은 무엇입니까?

MySQL에서 지연 기능을 시뮬레이션하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-18 01:01:08776검색

How to Simulate the Lag Function in 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.