Mysql
 sql >> база данни >  >> RDS >> Mysql

изберете предишна дата, mysql

Тъй като имате нужда само от една колона от „предишния“ ред, можете да опитате нещо подобно:

SELECT
  dte,
  id,
  value,
  (
    SELECT value
    FROM atable
    WHERE id = t.id
      AND dte < t.dte
    ORDER BY dte DESC
    LIMIT 1
  ) AS previous_value
FROM atable t

Ако трябва да изтеглите още „предишни“ атрибути, ето един по-сложен подход:

SELECT
  t1.dte,
  t1.id,
  t1.value,
  t2.dte,
  t2.value,
  …
FROM atable t1
  LEFT JOIN atable t2 ON t1.id = t2.id AND t1.dte > t2.dte
  LEFT JOIN atable t3 ON t1.id = t3.id AND t1.dte > t3.dte AND t3.dte > t2.dte
WHERE t3.id IS NULL

Вторият подход използва триъгълно самосъединяване, както и анти-съединяване към себе си. По принцип може да се преведе така:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Тази SELECT заявка отнема 180 секунди, за да завърши

  2. вмъкване, ако не съществува друго просто изберете в mysql

  3. Безопасен ли е MySQL конектор/JDBC нишка?

  4. MyISAM срещу InnoDB за бързи вмъквания и композитен уникален ключ

  5. MySQL едно към много присъединяване с Group By връща само едно наблюдение