SQL-lause haussa

Olkoon tietokanta seuraavanlainen (CSV)

HenkilöID, AutoID
1,10
2,12
3,3
4,12
5,3
6,2

Millä yksittäisellä SQL-lauseella voi valita rivin, jossa AutoID=12 esiintyy a) ensimmäisen b) viimeisen kerran?
3446
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Onko tämä siis joku csv-tietokanta vai joku "oikea" tietokanta jonka data nyt on vaan esitetty CSV-muodossa?

Relaatiotietokannassa riveillä ei ole varsinaisesti järjestystä. Voit järjestää ne haluamallasi tavalla, tai ottaa ne missa muodossa ne sattuvat tulemaankin.

Toteutustapa riippunee tietokannasta. Ensimmäisen ja viimeisen haku onnistuu samalla tavalla kunhan sorttaat sen päinvastaisesti.

Tämäntapaisen pitäisi toimia mikkisoftan mssql:ssä - järjestää henkilöID:n perusteella kun järkevämpääkään ei näytä olevan käsillä:
SELECT TOP 1 *
FROM taulu
WHERE AutoID=12
ORDER BY HenkilöID ASC

("viimeistä" varten ORDER BY HenkilöID DESC)

huom: tuo "TOP 1" on tietokantakohtaista. Jossain mysql se taitaa olla limit tms.

Äänestä
  • mitä en koskaan ole oppinut sisäistämään täysin, C , java, konekielet sun muu on selvää pässinlihaa mutta SQL vaan menee monilta osin yli, etenkin kaikki inner/outer joinit sun muut. Joten kiitos vastauksesta!

    Äänestä

Miten ensimmäisen tai viimeisen? Eihän tuossa ole järjestystä määritelty.

Vastauksia on monenlaisia ja kielestä riippuen. Ensimmäisen valinta on triviaalia (limit, top, jne avainsanoja), viimeinen vaatii rivinumeron lisäämisen ja niistä viimeisen hakemisen. Minä varmaan kirjoittaisin ensin haun jossa rivinumero mukana, pistäisin sen toisen haun lähdeaineistoksi ja järjestäisin rivinumeron mukaan laskevaksi. Sen jälkeen triviaali.

Mutta vieläkään en ymmärrä, miten sinä sen järjestyksen päättelet. :)

Äänestä

Kommentoi aloitusta


apuja? ei kotitehtäv kirjoitti:

Olkoon tietokanta seuraavanlainen (CSV)

HenkilöID, AutoID
1,10
2,12
3,3
4,12
5,3
6,2

Millä yksittäisellä SQL-lauseella voi valita rivin, jossa AutoID=12 esiintyy a) ensimmäisen b) viimeisen kerran?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu