sql >> Databáze >  >> RDS >> Sqlserver

Načítání nejnovějších záznamů v rámci dotazu

MySQL nemá funkci hodnocení/analytické funkce/okna.

SELECT tl.locationid, tl.timestamp, tp.name, X, Y, Z
  FROM tblPerson tp
  JOIN tblLocation tl ON tl.personid = tp.personid
  JOIN (SELECT t.personid,
               MAX(t.timestamp) AS max_date
          FROM tblLocation t
      GROUP BY t.personid) x ON x.personid = tl.personid
                            AND x.max_date = tl.timestamp

SQL Server 2005+ a Oracle 9i+ podporují analytiku, takže můžete použít:

SELECT x.locationid, x.timestamp, x.name, x.X, x.Y, x.Z
  FROM (SELECT tl.locationid, tl.timestamp, tp.name, X, Y, Z,
               ROW_NUMBER() OVER (PARTITION BY tp.name ORDER BY tl.timestamp DESC) AS rank
          FROM tblPerson tp
          JOIN tblLocation tl ON tl.personid = tp.personid) x
WHERE x.rank = 1

Použití proměnné k získání stejné funkce jako ROW_NUMBER na MySQL:

SELECT x.locationid, x.timestamp, x.name, x.X, x.Y, x.Z
  FROM (SELECT tl.locationid, tl.timestamp, tp.name, X, Y, Z,
               CASE
                 WHEN @name != t.name THEN
                   @rownum := 1
                 ELSE @rownum := @rownum + 1
               END AS rank,
               @name := tp.name
          FROM tblLocation tl
          JOIN tblPerson tp ON tp.personid = tl.personid
          JOIN (SELECT @rownum := NULL, @name := '') r
      ORDER BY tp.name, tl.timestamp DESC) x
WHERE x.rank = 1


  1. Mysql výběrový dotaz pro získání aktuálního příspěvku uživatele a sledování příspěvku přítele

  2. Vysvětlení funkce zabezpečení serveru SQL HAS_Permis_BY_Name a její případy použití

  3. Jak uložím data relace PHP do databáze místo do systému souborů?

  4. Oprava „ERROR 1222 (21000):Použité příkazy SELECT mají jiný počet sloupců“ při použití UNION v MariaDB