webForumDet fria alternativet

Krånglig fråga med klockslag!

Databaser & SQLur Databashanterare & SQL

131 svar · 4 120 visningar · startad av oskars · sida 7 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
#121

Så, den förra koden är redigerad igen. Det uteblivna resultatet berodde på ett syntaxfel ;)

Frågan är dock tung att köra.

Medlem sedan nov. 20051 317 inlägg
#122

Nice! Jag gör en testsökning nu och ser vad jag får för resultat!

Medlem sedan nov. 20051 317 inlägg
#123

Mjo, nu får vi fram resultat...

Men det visas så här:

2007-09-01 12:08:00 ; 2
2007-09-01 12:11:00 ; 3
2007-09-01 12:14:00 ; 2
2007-09-01 12:51:00 ; 1
2007-09-01 23:31:00 ; 7
2007-09-01 23:37:00 ; 7
2007-09-01 23:44:00 ; 5

Det ju bara vara 1st resultat per 2007-09-01 (Alltså det mellan dom klockslagen man angett).

Dom resultaten man får fram här... är det hur många resor som samtigit gjordes under dom exakta klockslagen?

Kanske det har att göra med hur man grupperar dom?

Medlem sedan dec. 20025 483 inlägg
#124

Oops. Det får bli typ så här i stället

select format(dt.s, "yyyy-mm-dd", 2, 2)
     , max(dt.c) 
 from (
 
select a.new_Start as s
     , ( select count(*) + 1 
           from allingsas 
          where id <> a.id 
            and ((hour(new_Start) = 12 and minute(new_Start) >= 0) or hour(new_Start) > 12) 
            and (((hour(new_Slut) = 13 and minute(new_Slut) <= 0) or hour(new_Slut) < 13) or (13 < 12 and hour(new_Slut) > 12)) 
            and ((new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut)) ) as c 
           from allingsas a 
          where weekday(a.new_Start, 2) = 7 
            and ((hour(a.new_Start) = 12 and minute(a.new_Start) >= 0) or hour(a.new_Start) > 12) 
            and (((hour(a.new_Slut) = 13 and minute(a.new_Slut) <= 0) or hour(a.new_Slut) < 13) or (13 < 12 and hour(a.new_Slut) > 12))
    ) as dt 
group
    by  format(dt.s, "yyyy-mm-dd", 2, 2)
Medlem sedan maj 20033 218 inlägg
#125

Börjar bli en rätt komplex fråga ; )

Medlem sedan nov. 20051 317 inlägg
#126

Sjodahl skrev:

Börjar bli en rätt komplex fråga ; )

Men Peter hanterar den bra :)

Reflekterat något över det jag skrev i PM?

Medlem sedan maj 20033 218 inlägg
#127

Väldigt bra! (y)

Medlem sedan dec. 20025 483 inlägg
#128

oskars skrev:

Men Peter hanterar den bra :)

Reflekterat något över det jag skrev i PM?

Ja, men jag kan inte svara då du har fullt i brevlådan ;)

Medlem sedan nov. 20051 317 inlägg
#129

Peter S skrev:

Ja, men jag kan inte svara då du har fullt i brevlådan ;)

Åtgärdat kompis!

Medlem sedan dec. 20025 483 inlägg
#130

Maratontråden fortsätter ;)

select format(dt.s, "yyyy-mm-dd", 2, 2)
     , max(dt.c) 
  from (
select a.new_Start as s
     , ( select count(*) + 1 
          from allingsas 
         where id <> a.id 
           and (
            (new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut) or
            (new_start < a.new_start and new_slut > a.new_start)
           ) ) as c 
  from allingsas a 
 where weekday(a.new_Start, 2) = 6
   and (
    ((hour(a.new_start) > 12 or (hour(a.new_start) = 12 and minute(a.new_start) >= 0)) and ((12 < 13 and (hour(a.new_start) < 13 or (hour(a.new_start) = 13 and minute(a.new_start) = 0))) or (12 > 13 and (hour(a.new_start) < 13 or (hour(a.new_start) = 13 and minute(a.new_start) = 0)))))
        or
    (12 < 13 and (hour(a.new_slut) > 12 or (hour(a.new_slut) = 12 and minute(a.new_slut) >= 0)) and (hour(a.new_slut) < 13 or (hour(a.new_slut) = 13 and minute(a.new_slut) = 0)))
        or
    (12 > 13 and ((datediff("d",a.new_start,a.new_slut)=0 and (hour(a.new_start) > 12 or (hour(a.new_start) = 12 and minute(a.new_start) >= 0)) and (hour(a.new_slut) > 12 or (hour(a.new_slut) = 12 and minute(a.new_slut) >= 0)))
            or (datediff("d",a.new_start,a.new_slut)=1 and (hour(a.new_start) > 12 or (hour(a.new_start) = 12 and minute(a.new_start) >= 0)) and (hour(a.new_slut) < 13 or (hour(a.new_slut) = 13 and minute(a.new_slut) = 0)) )))
        or
    (hour(a.new_start) < 12 and hour(a.new_slut) > 13)
   )
     ) as dt 
group
    by format(dt.s, "yyyy-mm-dd", 2, 2)
Medlem sedan dec. 20025 483 inlägg
#131

Ovanstående fungerar inte. Det behövs fler villkor i den innersta SELECT:en. Om huvud-SELECT:ens tid omsluter det angivna tidsintervallet, måste den inre SELECT:en inte bara se till att den ligger inom huvudtiden, utan även se till att den (på ett eller annat sätt) ligger inom intervallet.

Just nu känner jag att det blir för mycket att hålla reda på ;) Kanske att jag tittar på det igen vid ett senare tillfälle.

Medlem sedan nov. 20051 317 inlägg
#132

Tack för all hjälp Peter!

Är det någon annan som förstår sig på det här?

Jag är tacksam för all hjälp!!!

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