webForumDet fria alternativet

Krånglig fråga med klockslag!

Databaser & SQLur Databashanterare & SQL

131 svar · 4 126 visningar · startad av oskars · sida 5 av 7

Frågan, av oskars

Hej! Nu sitter jag här. Återigen. Jävla SQL. Jag vet inte hur jag ska tänka. Så fort frågan blir komplicerad så fastnar jag. Jag ska försöka sammanfatta mitt problem: Min tabell: Startdatum;Starttid;Slutdatum;Sluttid 20080725;1415;20080725;1425 20080725;1420;20080725;1435 20080725;1325;20080725;1425 20080725;1505;20080725;1550 20080725;2205;20080725;2230 20080725;2145;20080725;221

Läs frågan i sin helhet →
Medlem sedan dec. 20025 483 inlägg
#81

Det är någonting som verkar skumt, tycker jag. Kikar på det nu.

Medlem sedan nov. 20051 317 inlägg
#82

Jag tror att jag har hittat det skumma!

Det verkar som att vissa av posterna kan ha samma start- och sluttid? Kanske det pajjar det?

EDIT: Njaeh, kan inte vara enbart det iaf...

Medlem sedan dec. 20025 483 inlägg
#83

Nu tror jag det blir rätt:

SELECT dt.sd, max(dt.c)
  FROM (   
  SELECT d.Startdatum as sd
     , ( SELECT COUNT(*)+1 
           FROM allingsas 
          WHERE (starttid > d.starttid and ((starttid < d.sluttid) or (starttid > d.sluttid and datediff("d",startdatum,d.slutdatum)=1)))
            AND Startdatum = d.Startdatum AND ID <> d.ID and starttid > '2300' and sluttid < '0100') as c 
  FROM allingsas d 
 WHERE Weekday(d.Startdatum) = 3 
   AND Starttid > '2300' 
   AND Sluttid < '0100'
       ) dt
GROUP
    BY dt.sd
Medlem sedan nov. 20051 317 inlägg
#84

Absolut! Det ser jättebra ut!

Men ta en titt på bilden jag bifogat.

EDIT

Där ser vi att mellan 0100 och 0130 så är det totalt 4st resor... typ ingen av dom pågår ju samtidigt, men resultatet blir ändå 6?

Eller ser jag fel?

tb.gif
Medlem sedan dec. 20025 483 inlägg
#85

Kör följande så ser du att det är 8 rader:

select * from allingsas where startdatum = #2008-06-13#
order by starttid,sluttid
Medlem sedan nov. 20051 317 inlägg
#86

Oj, orka Access.exe

Så... Vi kan mao konstatera... Att det fungerar? :f

Medlem sedan dec. 20025 483 inlägg
#87

Kanske? Det är alldeles för sent för att konstatera ;) Jag kan kolla vidare i morgon om det inte är kört med deadlinen vill säga?

Medlem sedan nov. 20051 317 inlägg
#88

Jo, sent är det helt klart :)

Vi lämnar det för ikväll... Fan va du är duktig på det här alltså. Du är riktigt, riktigt schysst som hjälper mig! Jag är jättetacksam!

Det vore väldigt fint av dig om du vill kolla om det stämmer imorgon.

Jo, deadlinen är egentligen imorgon på förmiddagen (datan måste samlas ihop innan lunch typ)... Men vi kan inte göra så mkt mer nu! Natten tar ut sin rätt :) Men jäklarns vad du kan det här bra! Jag är jätteimponerad! Bra bra bra! Tack tack tack!

Medlem sedan dec. 20025 483 inlägg
#89

Då säger vi så :)

Medlem sedan nov. 20051 317 inlägg
#90

Godnatt! :bire

Medlem sedan dec. 20025 483 inlägg
#91

Det blev inte så mycket tid över som jag hade trott. Men tidigare kod fungerar i.a.f. inte. Hellre något i stil med:

select dt.sd, max(dt.c)
from
(
SELECT d.startdatum as sd,
( select count(*)+1 from allingsas where startdatum = d.startdatum and id <> d.id and starttid > '0100' 
    and ((datediff("d",startdatum,slutdatum)=0 and sluttid < '0130') or (datediff("d",startdatum,slutdatum)=1 and sluttid > '0100'))
    and
  ( (starttid > d.starttid and ((starttid < d.sluttid and datediff("d",startdatum,d.slutdatum)=0) or (starttid > d.sluttid and datediff("d",startdatum,d.slutdatum)=1)) )
    or (sluttid > d.starttid and ((sluttid < d.sluttid and datediff("d",slutdatum,d.startdatum)=0) or (sluttid > d.sluttid and datediff("d",slutdatum,d.slutdatum)=1))) )
) as c
  FROM allingsas d 
 WHERE Weekday(d.Startdatum) = 6 
   AND Starttid > '0100' 
   AND ((datediff("d",startdatum,slutdatum)=0 and sluttid < '0130') or (datediff("d",startdatum,slutdatum)=1 and sluttid > '0100'))
) dt
group by dt.sd

...men inte heller det är helt optimalt.

Medlem sedan nov. 20051 317 inlägg
#92

Ajdå, okej!

Tyckte ändå att det såg ut att fungera? Men kan ju missat massa också...

På vilket sätt är den här nya koden inte optimal? Vad tror du den missar?

Ska testa den asap!

Medlem sedan nov. 20051 317 inlägg
#93

Jag har kollat igenom lite mer här också... Vissa stämmer, men vissa inte... Kan inte hitta den röda tråden riktigt... Nollställd, igen :D

Medlem sedan dec. 20025 483 inlägg
#94

Om start- och sluttid inträffar samma dag så tror jag frågan är okej.

Medlem sedan nov. 20051 317 inlägg
#95

aha, det är alltså krånglet via 0000 som är knas!

Då. Mao. Lär det fungera bättre med HH:MM-formatet kanske?

Medlem sedan dec. 20025 483 inlägg
#96

Testa följande:

select dt.sd, max(dt.c)
  from ( select d.startdatum as sd
              , ( select count(*)
                    from allingsas
                   where startdatum = d.startdatum
                     and id <> d.id
                     and starttid > '2300'
                     and (('0100' < '2300' and (sluttid < '0100' or sluttid > starttid))
                      or ('0100' > '2300' and sluttid < '0100'))
                     and ((starttid > d.starttid and ((datediff("d",slutdatum,d.slutdatum) = 0 and starttid < d.sluttid) or datediff("d",startdatum,d.slutdatum) = 1))
                      or (datediff("d",slutdatum,d.startdatum) = 0 and sluttid > d.starttid and ((datediff("d",slutdatum,d.slutdatum) = 0 and sluttid < d.sluttid) or datediff("d",slutdatum,d.slutdatum) = 1))
                      or (datediff("d",d.startdatum,slutdatum) = 1 and datediff("d",slutdatum,d.slutdatum) = 0 and sluttid < d.sluttid)) ) as c
           from allingsas d
          where weekday(d.startdatum) = 3
            and d.starttid > '2300'
            and (('0100' < '2300' and (d.sluttid < '0100' or d.sluttid > d.starttid))
             or ('0100' > '2300' and d.sluttid < '0100')) ) as dt
group
    by dt.sd
Medlem sedan nov. 20051 317 inlägg
#97

Jag tar det som att den tidigare tiden du alltid anger är starttid :)

Ska testa den nya frågan! Peter - hjälten!

Medlem sedan dec. 20025 483 inlägg
#98

I ovanstående fall är 2300 starttiden och 0100 sluttiden. :)

Medlem sedan nov. 20051 317 inlägg
#99

Ja precis :) Hehe!

Jag är så himla imponerad att du klarar av att hålla koll på allting i frågan! Helt makalöst.

Frågan känns lite tyngre nu. Fullt möjligt va? Funderar på om man kanske ska köra den lokalt istället för online!

Medlem sedan dec. 20025 483 inlägg
#100

Ja, den är helt klart tyngre. Jag har inte försökt mig på några optimeringar, så det är väl inte helt omöjligt att den går att göra bättre ;)

137 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)