sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL Väljer senaste posten för ett givet ID

Det finns ungefär 5 olika sätt att göra detta på, men här är ett:

SELECT *
FROM yourTable AS T1 
WHERE NOT EXISTS(
    SELECT *
    FROM yourTable AS T2
    WHERE T2.ID = T1.ID AND T2.Date > T1.Date
)

Och här är en annan:

SELECT T1.*
FROM yourTable AS T1
LEFT JOIN yourTable AS T2 ON
(
    T2.ID = T1.ID 
    AND T2.Date > T1.Date
)
WHERE T2.ID IS NULL

En till:

WITH T AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC) AS rn
    FROM yourTable
)
SELECT * FROM T WHERE rn = 1

Ok, jag håller på att ryckas med, här är den sista jag ska lägga upp (för nu):

WITH T AS (
    SELECT ID, MAX(Date) AS latest_date
    FROM yourTable
    GROUP BY ID
)
SELECT yourTable.*
FROM yourTable
JOIN T ON T.ID = yourTable.ID AND T.latest_date = yourTable.Date


  1. Hur väljer man bara 1 rad från oracle sql?

  2. Få antalet misslyckade inloggningsförsök för en inloggning på grund av ett felaktigt lösenord i SQL Server (T-SQL)

  3. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer

  4. oci_bind_by_name och to_date PHP/OCI/Oracle