sql >> Database >  >> RDS >> Mysql

selecteer vorige datum, mysql

Aangezien u slechts één kolom van de "vorige" rij nodig heeft, kunt u zoiets als dit proberen:

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

Als u meer "vorige" kenmerken wilt gebruiken, is hier een meer geavanceerde aanpak:

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

De tweede benadering maakt gebruik van een driehoekige self-join en een anti-join to self. In principe zou het als volgt kunnen worden vertaald:



  1. Een logo voorwaardelijk weergeven op een externe site

  2. Hoe verbinding maken met MySQL met behulp van UTF8 in een perl-script?

  3. Zoeken naar laatste tekens in SQL Regex werkt niet

  4. INSERT INTO...SELECT voor alle MySQL-kolommen