Minulla on taulu, jossa seuraavanlaista dataa:
ID Aika Arvo Paivitetty
-- ----- ---- ------------------
1 10:00 1.0 25.2.2003 10:01:00
1 10:00 0.9 25.2.2003 12:13:14
1 11:00 1.1 25.2.2003 11:01:00
1 12:00 1.4 25.2.2003 12:01:00
2 10:00 1.0 25.2.2003 10:01:00
2 11:00 1.1 25.2.2003 11:01:00
2 12:00 1.4 25.2.2003 12:01:00
Minkälaisella SQL-lauseella tuosta taulusta
saadaan ulos viimeisimmät Arvot kunkin ID:n ja
Ajan kombinaatiosta? Eli suomeksi sanottuna vastauksena tuleva data olisi muuten sama, mutta
tuo ensimmäinen rivi puuttuisi, koska sille
(ID=1 ja Aika=10:00) on uudempi (päivitetty) arvo rivillä 2.
Auttakaa miestä mäessä, kun alkoi sukset lipsua!!!
ID Aika Arvo Paivitetty
-- ----- ---- ------------------
1 10:00 1.0 25.2.2003 10:01:00
1 10:00 0.9 25.2.2003 12:13:14
1 11:00 1.1 25.2.2003 11:01:00
1 12:00 1.4 25.2.2003 12:01:00
2 10:00 1.0 25.2.2003 10:01:00
2 11:00 1.1 25.2.2003 11:01:00
2 12:00 1.4 25.2.2003 12:01:00
Minkälaisella SQL-lauseella tuosta taulusta
saadaan ulos viimeisimmät Arvot kunkin ID:n ja
Ajan kombinaatiosta? Eli suomeksi sanottuna vastauksena tuleva data olisi muuten sama, mutta
tuo ensimmäinen rivi puuttuisi, koska sille
(ID=1 ja Aika=10:00) on uudempi (päivitetty) arvo rivillä 2.
Auttakaa miestä mäessä, kun alkoi sukset lipsua!!!
Vastaukset 7
Vanhimmat
SELECT ID,
aika,
last(arvo) AS lastOfarvo,
max(paivitetty) AS maxOfpaivitetty
FROM table
GROUP BY ID, aika;
Kiitos pikaisesta vastauksesta!
En tiedä johtuuko käyttämästäni Access2000:sta vai mistä, mutta antamasi lause palauttaa väärän
lukeman tuohon Arvon kohdalle. Eli kaikki muu on kohdallaan, mutta Arvo on väärästä tietueesta.
Lipsuu vieläkin...
Ainakin antamallasi esimerkkidatalla tuo kysely näytti olevan ihan ok.. Ensimmäinen rivi tipahti pois, just as you wanted.
Yksi asia, mikä voi sekoittaa pakkaa, on kyselyn order by -klausuuli. Testaa vielä tällä:
SELECT ID, aika, Last(paivitetty) AS LastOfpaivitetty, Last(arvo) AS LastOfarvo
FROM table
GROUP BY ID, aika
ORDER BY ID, aika, Last(paivitetty);
Vastauksesi oli aivan oikea eli kysely palautti juuri sen mitä pyysinkin.
Valitettavasti yritykseni yksinkertaistaa kysymystä kutenkin aiheutti että lähtödata oli riittämätön paljastamaan todellisen ongelmani. Jos testidataan lisätään yksi tietue:
ID Aika Arvo Paivitetty
--- ------ ----- ------------------
1 10:00 0.9 25.2.2003 12:13:14
niin ainakin minulle kysely palauttaa
rivin (tietysti noiden muiden lisäksi):
1 10:00 2 25.2.2003 12:13:14
eikä:
1 10:00 0.9 25.2.2003 12:13:14
kuten mielestäni pitäisi.
Testidata täydellisenä:
ID Aika Arvo Paivitetty
-- ----- ---- ------------------
1 10:00 1.0 25.2.2003 10:01:00
1 10:00 0.9 25.2.2003 16:15:14
1 10:00 2.0 25.2.2003 10:45:00
1 11:00 1.1 25.2.2003 11:01:00
1 12:00 1.4 25.2.2003 12:01:00
2 10:00 1.0 25.2.2003 10:01:00
2 11:00 1.1 25.2.2003 11:01:00
2 12:00 1.4 25.2.2003 12:01:00
SELECT ID, Aika, Arvo, Paivitetty
FROM Taulu
WHERE ID & Aika & Paivitetty IN
(SELECT ID & Aika & Max(Paivitetty)
FROM Taulu
GROUP BY ID, Aika)
KIITOS m!
Kysely palauttaa, ainakin pienellä testiaineistolla, aivan oikean vastauksen.
Pieni ongelma on, että se on melkoisen hidas, mutta pääasia on kuitenkin että se näyttäisi toimivan.
tuohon lauseesi voi olla paikallaan, jos olen oikein ymmärtänyt tuon &-operaattorin toiminnan.
Jotta kyselylle ei tule tulkintavirheitä, varsinkaan jos päivämäärissä ei käytetä etunollia, olisi ehkä hyvä laittaa kenttien väliin jokin erotin esim. näin:
...
WHERE ID & "-" & Aika & "-" & Paivitetty IN
(SELECT ID & "-" & Aika & "-" & Max(Paivitetty)
...