2017-08-10 12 views
0

auf SQL Server 2014 Ich habe eine Tabelle habe visits(id_visit, date, id_person) Ich kannGruppe von in einer Aggregatfunktion

in einer Aggregatfunktion für jede Person, die eine Art, die id_ des letzten Besuchs herauszufinden

nicht wirklich wissen, ob es kann helfen, hier aber ist eine Art, was ich

select * 
from visits 
where id_visit in (select id_visit, max(date) from visits group by id_person) 

haben möchte, wenn ich wie Besuche hatte (id_visit, id_person, Datum) 1,1, ‚2017.07.17‘ 2,1 , '2017.01.01' 3,2, '2016.01.01' 4,2, '2015.01.01' 5,2, '2013-01-01' ich möchte es zurück zum 1,3,5

+0

einige Beispieltabellendaten hinzufügen und das erwartete Ergebnis - wie formatierten Text. – jarlh

Antwort

1

Sie ROW_NUMBER verwenden:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY id_person ORDER BY date DESC) AS rn 
    FROM visits 
) 
SELECT * 
FROM cte 
WHERE rn = 1; 

wird es letzten Besuch pro Person zurück.

+0

Sieht aus wie seine Arbeit, und wie würdest du das vorstellen, wenn ich einige und Klauseln in meinem Hauptteil hätte? –

+0

@BastienMorel Nur undd sie nach 'rn = 1 und ...' – lad2025

-1

Sie benötigen auf mehr subselect:

SELECT * 
    FROM visits 
WHERE id_visit IN (SELECT id_visit 
         FROM visits 
        WHERE date IN (SELECT max(date) 
             FROM visits 
            GROUP BY id_person)) 
+0

das ist, was ich dachte, aber ich war nicht erfolgreich es Sie dabei richtig danken –

+0

tut sie, was Sie wollen? vielleicht dann markiert als anwer; D – RealCheeseLord

+0

ich habe ein Problem, links, wenn ich eine habe und b am selben Tag besucht dann später b besucht, wird es mir sowohl b Besuche zeigen, während ich nur die zweiten erscheinen soll –

Verwandte Themen