/ / SQL wybierz wiele max wierszy, w których identyfikator jest taki sam - sql

SQL wybierz wiele max wierszy, w których identyfikator jest taki sam - sql

nieustannie walczyłem o to, ale nie mogę go uruchomić. byłem na tych forach już od wielu godzin ... Zestaw danych:

Data wiersza Identyfikator konta Kolumna 1 121/02/2013 0:30 A0M8FA1003YP. 2 21/02/2013 0:30 A0M8FA1003YP. 3 21/02/2013 0:30 A0M8FA1003YP. 4 24/09/2007 12:00 A0M8FA1003YP. 5 24/09/2007 12:00 A0M8FA1003YP. 6 24/09/2007 12:00 A0M8FA1003YP. 7 12/02/2009 12:00 A023123332YP. 8 24/09/2003 12:00 A023123332YP. 9 24/09/2003 12:00 A023123332YP. 10 24/09/2003 12:00 A023123332YP.

Chcę zwrócić maksymalną wartość datykolumna, ale nie tylko zwrócić jeden wiersz, ale wszystkie wiersze, które pasują do tej maksymalnej wartości. To znaczy. W powyższym zestawie chcę zwrócić wiersze 1, 2, 3 i 7 (wszystkie kolumny również dla wierszy).

Data wiersza Identyfikator konta Kolumna1 1 21/02/2013 0:30 A0M8FA1003YP. 2 21/02/2013 0:30 A0M8FA1003YP. 3 21/02/2013 0:30 A0M8FA1003YP. 7 12/02/2009 12:00 A023123332YP.

Mam tysiące wierszy, a liczba pasujących wierszy do zwrotu dla każdego ACCOUNTID będzie się różnić, około 1, około 2, około 10. Proszę mi pomóc !!!

AKTUALIZACJA Próbowałem tego

Wybierz max (ASS_SCH_DATE) ponad (partycja przez AccountID), AccountID, ASS_SCH_DATE, ACCOUNTID z # Temp3 zamówienie przez # Temp3.ACCOUNTID

Wyniki nadal pokazują dodatkowe wiersze.


(Brak nazwy kolumny) ASS_SCH_DATE      ID KONTA 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2013-02-21 00: 30: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2007-09-24 12: 00: 00.000 A0M8FA1003YP 2013-02-21 00: 30: 00.000 2007-09-24 12: 00: 00.000 A0M8FA1003YP

Odpowiedzi:

4 dla odpowiedzi № 1

Pytanie:

SQLFIDDLEExample

SELECT t1.*
FROM Table1 t1
WHERE t1.Date = (SELECT MAX(t2.Date)
FROM Table1 t2
WHERE t2.AccountID = t1.AccountID)

Wynik:

| ROW |                            DATE |    ACCOUNTID |
--------------------------------------------------------
|   1 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   2 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   3 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   7 | February, 12 2009 12:00:00+0000 | A023123332YP |

1 dla odpowiedzi nr 2
select * from table where date in (select max(date) from table)

0 dla odpowiedzi № 3

Funkcje systemu Windows są tym, czego szukasz:

Select row,max(date) over (partition by AccountID) As max_date, AccountID,
Column1 from table where max_date = date;

0 dla odpowiedzi nr 4

Spróbuj użyć Szeregi:

SELECT  AccountID,
ASS_SCH_DATE,
RANK() OVER (PARTITION BY ASS_SCH_DATE ORDER BY AccountID) DateRank
FROM YourTable
WHERE DateRank = 1

W ten sposób możesz również wybrać najwyższe stopnie, drugie najwyższe itd ...


0 dla odpowiedzi № 5

Spróbuj tego,

select * from tablename where date in (select max(date) from table group by AccountID)

Zobacz Demo programu sqlFiddle. Daje to samo wyjście, jakiego oczekujesz.


0 dla odpowiedzi № 6

Łatwy...

Będąc „obojętnym” twoim stołem, napisałbym:

SELECT dummy.*
FROM
(
SELECT MAX(Date) Date, AccountID
FROM dummy
GROUP BY AccountID
) max_date
INNER JOIN dummy
ON(
dummy.Date      = max_date.Date
AND dummy.AccountID = max_date.AccountID
)

Lub, używając nowoczesnej, bardziej semantycznej składni:

WITH max_date(Date, AccountID)
AS
(
SELECT MAX(Date) Date, AccountID
FROM dummy
GROUP BY AccountID
)
SELECT dummy.*
FROM
max_date
INNER JOIN dummy
ON(
dummy.Date      = max_date.Date
AND dummy.AccountID = max_date.AccountID
)