sql >> Database teknologi >  >> RDS >> Mysql

Hvilken række (i rækkefølge efter en kolonne) i en tabel svarer til en række i en anden tabel?

Den nødvendige SQL til dette er brutal; det vil give din optimizer en rigtig seriøs træning.

At dømme ud fra kommentarerne efter spørgsmålet såvel som spørgsmålet er ønsket at behandle hændelsesforløb for et givet bruger-id i den store tabel som 'sammenhængende', hvis de alle falder inden for et fast interval mellem tilstødende hændelser. For eksempel vil det faste interval være 3 timer. Jeg koder til IBM Informix Dynamic Server (for argumentets skyld, version 11.70, men 11.50 ville også fungere fint). Det betyder, at der er en idiosynkratisk notation, jeg skal forklare. Specifikt notationen 3 UNITS HOUR angiver et interval på 3 timer; det kunne også skrives INTERVAL(3) HOUR TIL HOUR på Informix-dialekten i SQL eller som INTERVAL '3' TIMER i standard SQL.

Der er et par afgørende teknikker til at generere SQL, især kompleks SQL. Den ene er at bygge SQL'en op i trin, stykkevis, og samle det endelige resultat. Den anden er at sikre, at du har en klar specifikation af, hvad det er, du går efter.

I den følgende notation skal kvalifikationen "for det samme User_ID" betragtes som altid en del af udtrykket.

I den store tabel er der tre kategorier af rækkevidde, som vi vil overveje, før vi slutter os til det lille bord.

  1. Indgange, hvor der hverken er en række med et begivenhedstidspunkt før begivenheden, der er tæt nok på, eller en række med et begivenhedstidspunkt efter begivenheden, der er tæt nok på. Dette er et tidsinterval med samme start- og sluttidspunkt.
  2. Et par poster i tabellen, som i sig selv er tæt nok på, men hvor der hverken er en begivenhed tidligere end den tidlige begivenhed for parret, der er tæt nok på, eller en begivenhed senere end den sene begivenhed for parret, der er tæt nok på heller ikke en begivenhed mellem parret.
  3. En sekvens af tre eller flere poster i tabellen, for hvilken der er:
    • Ingen begivenhed E1 tidligere end den tidligste, der er tæt nok på
    • Ingen begivenhed E2 senere end den seneste, der er tæt nok på
    • En begivenhed E3 senere end den tidligste, der er tæt nok på den tidligste
    • En begivenhed E4 tidligere end den seneste, der er tæt nok på den seneste (E4 kan muligvis være den samme begivenhed som E3)
    • Ingen hændelsespar E5, E6 mellem den tidligste og den seneste, hvor der ikke er nogen hændelse mellem E5 og E6, men afstanden mellem E5 og E6 er for stor til at tælle.

Som du kan se fra beskrivelsen, bliver dette noget skræmmende SQL!

NB:Koden er nu testet; nogle (hovedsageligt små) ændringer var nødvendige. En mindre unødvendig ændring var tilføjelsen af ​​ORDER BY-klausuler på mellemliggende forespørgsler. En anden unødvendig ændring var at vælge de andre data fra den lille tabel til verifikationsformål. Denne revision blev foretaget uden at studere den ændrede version indsendt af msh210 .

Bemærk også, at jeg langt fra er sikker på, at dette er en minimal formulering; det kan være muligt at klassificere alle områderne med en enkelt SELECT-sætning i stedet for en UNION af tre SELECT-sætninger (og det ville være godt, hvis det er tilfældet).

Singleton-intervaller

-- Områder af præcis 1 hændelseSELECT lt1.user_id, lt1.event_time AS min_time, lt1.event_time AS max_time FROM Large_Table AS lt1 WHERE NOT EXISTS -- en tidligere hændelse, der er tæt nok på (SELECT * FROM Large_Table AS lt3 WHERE lt1.user_id =lt3.user_id OG lt3.event_time> lt1.event_time - 3 ENHEDER TIME OG lt3.event_time lt1.event_time OG lt4.event_time

Doubleton Ranges

-- Områder med nøjagtig 2 hændelserSELECT lt1.user_id, lt1.event_time AS min_time, lt2.event_time AS max_time FROM Large_Table AS lt1 JOIN Large_Table AS lt2 ON lt1.user_id =lt2.user_id OG_lt2vent lt1. .event_time OG lt2.event_time lt1e. 3 ENHEDER TIME OG lt3.event_time lt2.lt4.time AND . hændelsestidspunkt lt1.event_time OG l t5.event_time

Tilføjet 3 timers kriterium til den ydre WHERE-sætning.

Flere hændelsesintervaller

-- Områder af 3 eller flere hændelser.VÆLG lt1.user_id, lt1.event_time AS min_time, lt2.event_time AS max_time FROM Large_Table AS lt1 JOIN Large_Table AS lt2 ON lt1.user_id =lt2.user_id AND lt1. lt2.event_time WHERE NOT EXISTS -- en tidligere hændelse, der er tæt nok på (SELECT * FROM Large_Table AS lt3 WHERE lt1.user_id =lt3.user_id AND lt3.event_time> lt1.event_time - 3 UNITS HOUR AND lt3.event_time lt2.event_time AND lt4.event_time lt1.event_time AND (lt6.event_time - lt5.event_time)> 3 ENHEDER en hændelse OG IKKE i EXISTS TIME mellem disse to (SELECT * FROM Large_Table AS lt9 WHERE lt5.user_id =lt9.user_id OG lt9.event_time> lt5.event_time OG lt9.event_time lt8.eve nt_time AND lt8.event_time> lt2.event_time - 3 ENHEDER TIME OG lt8.event_time> lt1.event_time )ORDER BY User_ID, Min_Time;

Tilføjet udeladt indlejret NOT EXISTS-sætning i underforespørgslen "store huller".

Alle områder i stor tabel

Det er klart, at den komplette liste over områder i den sidste tabel er foreningen af ​​de tre forespørgsler ovenfor.

Forespørgsel slettet som ikke interessant nok. Det er simpelthen 3-vejs UNION af de separate forespørgsler ovenfor.

Endelig forespørgsel

Den endelige forespørgsel finder intervallerne, hvis nogen, i resultatet af den grufulde 3-delt UNION, som er tæt nok på indgangen i den lille tabel. En enkelt post i det lille bord falder måske kl. 13:00, og der kan være et interval i det store bord, der slutter kl. 11:00 og et andet, der starter kl. 15:00. De to intervaller fra det store bord er adskilte (mellemrummet mellem dem er 4 timer), men indgangen i den lille tabel er tæt nok på begge til at tælle. [Testene dækker dette tilfælde. ]

VÆLG S.User_id, S.Event_Time, L.Min_Time, L.Max_Time, S.Other_Data FROM Small_Table AS S JOIN ( -- Områder med nøjagtig 1 hændelse SELECT lt1.user_id, lt1.event_time AS min_time, lt1.event_time AS max_time FRA Large_Table AS lt1 WHERE NOT EXISTS -- en tidligere hændelse, der er tæt nok på (SELECT * FROM Large_Table AS lt3 WHERE lt1.user_id =lt3.user_id AND lt3.event_time> lt1.event_time - AND 3 UNITS HOUR .event_time  lt1.event_time AND lt4.event_time_time  lt1.event_time - 3 UNITS HOUR AND lt3.event_time  lt2.event_time AND lt4.event_time  lt1.event_time AND lt5.event_time  lt1.event_time - 3 UNITS HOUR AND lt3.event_time  lt2.event_time OG lt4.event_time  lt1.event_time AND (lt6.lt5.event_time) AND NOT EXISTS -- en hændelse mellem disse to (SELECT * FROM Large_Table AS lt9 WHERE lt5.user_id =lt9.user_id AND lt9.event_time> lt5.event_time AND lt9.event_time  lt8.event_time OG lt8.event_time> lt2.event_time - 3 ENHEDER lt8.event_time> lt1.event_time ) ) AS L ON S.User_ID =L.User_ID WHERE S.Event_Time> L.Min_Time - 3 UNITS HOUR AND S.Event_Time  

OK - rimelig advarsel; SQL'en har faktisk ikke været i nærheden af ​​et SQL DBMS.

Koden er nu testet. Den uendelig lille chance var faktisk nul; der var en syntaksfejl og et par mere eller mindre mindre problemer at løse.

Jeg eksperimenterede i etaper efter at have udarbejdet testdataene. Jeg brugte 'Alpha'-dataene (se nedenfor), mens jeg validerede og rettede forespørgslerne, og tilføjede kun Beta-dataene for at sikre, at der ikke var nogen krydstale mellem forskellige User_ID-værdier.

Jeg brugte eksplicit < og > operationer i stedet for MELLEM ... OG at udelukke slutpunkterne; hvis du ønsker, at begivenheder med nøjagtig 3 timers mellemrum skal tælle som 'tæt nok', så skal du gennemgå hver ulighed, eventuelt ændre dem til MELLEM ... OG eller muligvis bare ved at bruge >= eller <= efter behov.

Der er et svar til et løst lignende, men ret enklere spørgsmål, som (a) jeg skrev og (b) gav nogle nyttige tanker om den komplekse behandling ovenfor (især kriterierne "ingen begivenhed tidligere, men tæt nok på" og "ingen begivenhed senere, men tæt nok på" Kriterierne 'tæt nok' komplicerer absolut dette spørgsmål.

Testdata

Stor bord

CREATE TABLE Large_Table( Event_Time DATETIME YEAR TO MINUTE NOT NULL, User_ID CHAR(15) NOT NULL, Other_Data INTEGER NOT NULL, PRIMARY KEY(User_ID, Event_Time));INSERT INTO Large_Table(Event_Time, User_ID, Other_Data, Other_Data) VALUES('2012-01-01 09:15', 'Alpha', 1) { R4 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 11:15', 'Alpha', 2) { R4 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 13:15', 'Alpha', 3) { R4 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES ('2012-01-01 15:15', 'Alpha', 4) { R4 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 12:17', 'Beta', 1 ) { R4 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 09:15', 'Alpha', 5) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES( '2012-01-02 10:17', 'Beta', 2) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-03 09:15' , 'Alpha', 6) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-03 11:15', 'Alpha', 7) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-03 10:17', 'Beta', 3) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 09:15', 'Alpha', 8) { R3 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 11:15', 'Alpha', 9) { R3 };INSERT INTO Large_Table(Event_Time, User_ID , Other_Data) VALUES('2012-01-04 13:15', 'Alpha', 10) { R3 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 10:17', ' Beta', 4) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 09:15', 'Alpha', 11) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 11:15', 'Alpha', 12) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 10:17', 'Beta ', 5) { R1 };{ Probe here }INSERT INTO Large_Table(Even t_Time, User_ID, Other_Data) VALUES('2012-01-05 15:15', 'Alpha', 13) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 17:15 ', 'Alpha', 14) { R2 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 16:17', 'Beta', 6) { R1 };INSERT INTO Large_Table(Event_Time , User_ID, Other_Data) VALUES('2012-01-06 09:15', 'Alpha', 15) { R6 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 11:15' , 'Alpha', 16) { R6 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 13:15', 'Alpha', 17) { R6 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 15:15', 'Alpha', 18) { R6 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 17:15', 'Alpha', 19) { R6 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 19:15', 'Alpha', 20) { R6 };INSERT INTO Large_Table(Event_Time, User_ID , Other_Data) VALUES('2012-01-06 16:17', 'Beta', 7) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 09:15', 'Alpha', 21) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES ('2012-01-07 11:17', 'Beta', 8) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 12:15', 'Alpha', 22 ) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 13:17', 'Beta', 9) { R1 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES( '2012-01-08 09:15', 'Alpha', 23) { R5 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 11:15', 'Alpha', 24) { R5 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 13:15', 'Alpha', 25) { R5 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES(' 2012-01-08 15:15', 'Alpha', 26) { R5 };INSERT INTO Large_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 17:15', 'Alpha', 27) { R5 }; 

Lille bord

Bemærk:til testformål indeholder den lille tabel faktisk flere rækker end den store tabel. Rækkerne i den lille tabel med Other_Data-værdier større end 100 bør ikke vises i resultaterne (og gør det ikke). Testene her stikker i kanten.

CREATE TABLE Small_Table( Event_Time DATETIME YEAR TO MINUTE NOT NULL, User_ID CHAR(15) NOT NULL, Other_Data INTEGER NOT NULL, PRIMARY KEY(User_ID, Event_Time));INSERT INTO Small_Table(Event_Time, User_Data, Other_Data) VALUES('2012-01-01 06:15', 'Alpha', 131) { XX };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 06:20', 'Alpha', 31) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 10:20', 'Alpha', 32) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES ('2012-01-01 13:20', 'Alpha', 33) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 15:20', 'Alpha', 34 ) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 18:15', 'Alpha', 134) { XX };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES( '2012-01-02 06:15', 'Alpha', 135) { XX };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 06:16', 'Alpha', 35) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 10:20', 'Alpha', 35) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 12:14', 'Alpha', 35) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 12 12 :15', 'Alpha', 135) { XX };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-03 09:20', 'Alpha', 36) { YY };INSERT INTO Small_Table (Event_Time, User_ID, Other_Data) VALUES('2012-01-03 11:20', 'Alpha', 37) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 09:20', 'Alpha', 38) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 11:20', 'Alpha', 39) { YY };INSERT INTO Small_Table( Event_Time, User_ID, Other_Data) VALUES('2012-01-04 13:20', 'Alpha', 40) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 09:20 ', 'Alpha', 41) { YY };INSERT INTO Small_Table(E vent_Time, User_ID, Other_Data) VALUES('2012-01-05 11:20', 'Alpha', 42) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 13:20 ', 'Alpha', 42) { 22 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 15:20', 'Alpha', 43) { YY };INSERT INTO Small_Table(Event_Time , User_ID, Other_Data) VALUES('2012-01-05 17:20', 'Alpha', 44) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 09:20' , 'Alpha', 45) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 11:20', 'Alpha', 46) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 13:20', 'Alpha', 47) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 15:20', 'Alpha', 48) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 17:20', 'Alpha', 49) { YY };INSERT INTO Small_Table(Event_Time, User_ID , Other_Data) VALUES('2012-01-06 19:2 0', 'Alpha', 50) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 09:20', 'Alpha', 51) { YY };INSERT INTO Small_Table( Event_Time, User_ID, Other_Data) VALUES('2012-01-07 10:20', 'Alpha', 51) { 22 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 12:20 ', 'Alpha', 52) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 09:20', 'Alpha', 53) { YY };INSERT INTO Small_Table(Event_Time) , User_ID, Other_Data) VALUES('2012-01-08 11:20', 'Alpha', 54) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 13:20' , 'Alpha', 55) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 15:20', 'Alpha', 56) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-08 17:20', 'Alpha', 57) { YY };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-07 13:27', 'Beta', 9) { R1 };INSERT INTO Small_Table(Event_T ime, User_ID, Other_Data) VALUES('2012-01-07 11:27', 'Beta', 8) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-06 16:27 ', 'Beta', 7) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-05 16:27', 'Beta', 6) { R1 };INSERT INTO Small_Table(Event_Time , User_ID, Other_Data) VALUES('2012-01-05 10:27', 'Beta', 5) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-04 10:27' , 'Beta', 4) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-03 10:27', 'Beta', 3) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-02 10:27', 'Beta', 2) { R1 };INSERT INTO Small_Table(Event_Time, User_ID, Other_Data) VALUES('2012-01-01 12:27', 'Beta', 1) { R4 }; 

Endelige forespørgselsresultater

Ved at bruge dataene ovenfor var de opnåede resultater:

Alpha 2012-01-01 06:20 2012-01-01 09:15 2012-01-01 15:15 31Alpha 2012-01-01 10:20 2012-01-01 09:15 01-01 15:15 32Alpha 2012-01-01 13:20 2012-01-01 09:15 2012-01-01 15:15 33Alpha 2012-01-01 15:20 2012-01-2012-1 01-01 15:15 34Alpha 2012-01-02 06:16 2012-01-02 09:15 2012-01-02 09:15 35Alpha 2012-01-02 10:20 2012-201-2012-1 01-02 09:15 35Alpha 2012-01-02 12:14 2012-01-02 09:15 2012-01-02 09:15 35Alpha 2012-01-03 09:20 2012-1-2012-1 01-03 11:15 36Alpha 2012-01-03 11:20 2012-01-03 09:15 2012-01-03 11:15 37Alpha 2012-01-04 09:20 2012-1201-2012-1 01-04 13:15 38Alpha 2012-01-04 11:20 2012-01-04 09:15 2012-01-04 13:15 39Alpha 2012-01-04 13:20 2012-1201-2012-1 01-04 13:15 40Alpha 2012-01-05 09:20 2012-01-05 09:15 2012-01-05 11:15 41Alpha 2012-01-05 11:20 2012-01-2012-1 01-05 11:15 42Alpha 2012-01-05 13:20 2012-01-05 09:15 2012- 01-05 11:15 42Alpha 2012-01-05 13:20 2012-01-05 15:15 2012-01-05 17:15 42Alpha 2012-01-05 15:20 2012-101-2012-15:20 01-05 17:15 43Alpha 2012-01-05 17:20 2012-01-05 15:15 2012-01-05 17:15 44Alpha 2012-01-06 09:20 2012-1201-2012-1 01-06 19:15 45Alpha 2012-01-06 11:20 2012-01-06 09:15 2012-01-06 19:15 46Alpha 2012-01-06 13:20 2012-1-2012-1 01-06 19:15 47Alpha 2012-01-06 15:20 2012-01-06 09:15 2012-01-06 19:15 48Alpha 2012-01-06 17:20 17:20 1-2012-2012-1 01-06 19:15 49Alpha 2012-01-06 19:20 2012-01-06 09:15 2012-01-06 19:15 50Alpha 2012-01-07 09:20 2012-1-2012-1 01-07 09:15 51Alpha 2012-01-07 09:20 2012-01-07 12:15 2012-01-07 12:15 51Alpha 2012-01-07 10:20 2012-1-2012-1 01-07 09:15 51Alpha 2012-01-07 10:20 2012-01-07 12:15 2012-01-07 12:15 51Alpha 2012-01-07 12:20 2012-1201-2012-1201:01-07 12:15 52Alpha 2012-01-08 09:20 2012-01-08 09:15 2012-01-08 17:15 53Alpha 2012-01-08 11:20 2012-01-08 09:15 2012-01-08 17:15 54Alpha 2012-01-08 13:20-13:20-13:20 2012-01-08 17:15 55Alpha 2012-01-08 15:20 2012-01-08 09:15 2012-01-08 17:15 56Alpha 2012-01-08 17:20-18:20-17:20 2012-01-08 17:15 57Beta 2012-01-01 12:27 2012-01-01 12:17 2012-01-01 12:17 1Beta 2012-01-02 10:27 101-27 1010 2012-01-02 10:17 2Beta 2012-01-03 10:27 2012-01-03 10:17 2012-01-03 10:17 3Beta 2012-01-04 10:27 1104-2012 2012-01-04 10:17 4Beta 2012-01-05 10:27 2012-01-05 10:17 2012-01-05 10:17 5Beta 2012-01-05 16:27 6:27 1105 2012-01-05 16:17 6Beta 2012-01-06 16:27 2012-01-06 16:17 2012-01-06 16:17 7Beta 2012-01-07 11:27 1172 1172 2012-01-07 13:17 8Beta 2012-01-07 13:27 2012-01-07 11:17 2012-01-07 13:17 9 

Mellemresultater

Lidt anderledes formatering i kraft.

Singleton-intervaller

Alpha|2012-01-02 09:15|2012-01-02 09:15Alpha|2012-01-07 09:15|2012-01-07 09:15Alpha|2012-01-07 12 :15|2012-01-07 12:15Beta|2012-01-01 12:17|2012-01-01 12:17Beta|2012-01-02 10:17|2012-01-02 10:17Beta|2017Beta| 01-03 10:17|2012-01-03 10:17Beta|2012-01-04 10:17|2012-01-04 10:17Beta|2012-01-05 10:17:2012-01-05 17Beta|2012-01-05 16:17|2012-01-05 16:17Beta|2012-01-06 16:17|2012-01-06 16:17 

Doubleton Ranges

Alpha|2012-01-03 09:15|2012-01-03 11:15Alpha|2012-01-05 09:15|2012-01-05 11:15Alpha|2012-01-05 15 :15|2012-01-05 17:15Beta|2012-01-07 11:17|2012-01-07 13:17 

Flere hændelsesintervaller

Alpha|2012-01-01 09:15|2012-01-01 15:15Alpha|2012-01-04 09:15|2012-01-04 13:15Alpha|2012-01-06 09 :15|2012-01-06 19:15Alpha|2012-01-08 09:15|2012-01-08 17:15 


  1. Installation af MySQLdb på Mac OS X

  2. Indebærer en Postgres UNIQUE begrænsning et indeks?

  3. MySQL (eller PHP?) grupperer resultater efter feltdata

  4. Opret en optgroup fra en matrix af data