Velg forskjellig fra usercolumn og minimumsverdien av datoer for hvert felt i usercolumn

stemmer
6

Jeg har noen data som dette, men mer enn 1.500.000 poster og mer enn 700 brukere:

usercolumn   ,       datecolumn\     
a1            ,      1998/2/11\
a2            ,      1998/3/11\
a1            ,      1998/2/15\
a4            ,      1998/4/14\
a3            ,      1999/1/15\
a2            ,      1998/11/12\
a2            ,      1999/2/11\
a3            ,      2000/2/9\
a1            ,      1998/6/5\
a3            ,      1998/7/7\
a1            ,      1998/3/11\
a5            ,      1998/3/18\
a2            ,      1998/2/8\
a1            ,      1998/12/11\
a4            ,      1998/12/1\
a5            ,      1998/2/11\
....

Jeg vil gjerne ha forskjellige data fra usercolumn og minimumsverdien av dato for hver bruker som dette:

usercolumn      ,    datecolumn \        
a1              ,    1998/2/11\
a2              ,    1998/2/8\
a3              ,    1998/7/7\
a4              ,    1998/4/14\
a5              ,    1998/2/11\
....

kan du hjelpe meg å skrive en SQL-kommando for å gjøre dette for OLEDB adapter i C #, takk.

Publisert på 20/06/2009 klokken 14:34
kilden bruker
På andre språk...                            


6 svar

stemmer
0

Noe som dette bør gjøre flåtten

    SELECT usercolumn
         , MIN(datecolumn)
      FROM YouTable
     GROUP BY usercolumn
         , MIN(datecolumn)
Svarte 20/06/2009 kl. 14:39
kilden bruker

stemmer
0

Hvis du har mer enn bare disse to kolonner, den beste SQL til å bruke, avhenger litt på hvilken server du har i den andre enden av det OLEDB adapter, men her er noe som vil fungere godt sammen med mange (akk, ikke alle!) Slik mulig servere:

SELECT t.*
FROM thetable t
LEFT JOIN thetable taux
  ON(t.usercolumn=taux.usercolumn
     AND t.datecolumn>taux.datecolumn)
WHERE taux.usecolumn IS NULL

som du kan lese som "avgir disse radene av thetable slik at det er ingen andre rad i tabellen med samme brukernavn og et strengt mindre date". Hvis minimum dato for en gitt bruker kan skje flere ganger vil dette gi så mange rader for brukeren - Hvis det er et problem for deg, det finnes løsninger på det, også ... men jeg vil vente på deg til å avklare spørsmålet ditt mer før jeg jobbe noe mer på dette -!)

Svarte 20/06/2009 kl. 14:57
kilden bruker

stemmer
2

Dette vil fungere for SQLServer 2008 og DB2:

with temp as (
    select *, row_number() over (partition by usercolumn order by datecolumn) as rownum
    from table)
select * from temp 
where rownum = 1

Det vil gi riktig resultat, selv om du trenger å ta med flere kolonner i velge.

Svarte 20/06/2009 kl. 15:18
kilden bruker

stemmer
22
SELECT usercolumn, MIN(datecolumn) FROM tablename GROUP BY usercolumn;

Merk at hvis du vil at andre kolonner må de enten møte GROUP BY-leddet eller være konstant over rader. Ellers vil resultatet være ikke-deterministisk.

Svarte 20/06/2009 kl. 15:22
kilden bruker

stemmer
0

du kan prøve dette:

SELECT DISTINCT a.username, a.date
FROM tablename AS a INNER JOIN tablename AS b
ON(a.username = b.username AND a.date < b.date)

Som for C #, kan ikke hjelpe deg der

Svarte 20/06/2009 kl. 16:00
kilden bruker

stemmer
0

SELECT DISTINCT brukernavn, dato Fra tabellnavn SOM DER A.DATE = (SELECT MIN (DATE) FROM tabellnavn der brukernavn = A.USERNAME)

Svarte 20/08/2009 kl. 19:52
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more