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 № 1Pytanie:
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
)