---
title: "Krånglig fråga med klockslag!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag/page5"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "oskars"
published: "2008-09-15T17:40:55.000Z"
updated: "2008-10-03T10:04:36.000Z"
replies: 131
views: 4278
page: 5
pages: 7
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag"
---

# Krånglig fråga med klockslag!

_Sida 5 av 7._

## #81 — Peter S, 2008-09-22T21:29Z

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

Permalänk: https://www.webforum.nu/p/2143349

## #82 — oskars, 2008-09-22T21:33Z

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...

Permalänk: https://www.webforum.nu/p/2143352

## #83 — Peter S, 2008-09-22T21:51Z

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
```

Permalänk: https://www.webforum.nu/p/2143359

## #84 — oskars, 2008-09-22T22:08Z

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?

Bilagor:

- [tb.gif](https://www.webforum.nu/a/19212.gif)

Permalänk: https://www.webforum.nu/p/2143366

## #85 — Peter S, 2008-09-22T22:17Z

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

```
select * from allingsas where startdatum = #2008-06-13#
order by starttid,sluttid
```

Permalänk: https://www.webforum.nu/p/2143370

## #86 — oskars, 2008-09-22T22:20Z

Oj, orka Access.exe  

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

Permalänk: https://www.webforum.nu/p/2143371

## #87 — Peter S, 2008-09-22T22:26Z

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?

Permalänk: https://www.webforum.nu/p/2143372

## #88 — oskars, 2008-09-22T22:32Z

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!

Permalänk: https://www.webforum.nu/p/2143373

## #89 — Peter S, 2008-09-22T22:33Z

Då säger vi så :)

Permalänk: https://www.webforum.nu/p/2143374

## #90 — oskars, 2008-09-22T22:37Z

Godnatt!   :bire

Permalänk: https://www.webforum.nu/p/2143376

## #91 — Peter S, 2008-09-23T19:49Z

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.

Permalänk: https://www.webforum.nu/p/2143614

## #92 — oskars, 2008-09-24T05:01Z

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!

Permalänk: https://www.webforum.nu/p/2143665

## #93 — oskars, 2008-09-24T17:33Z

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

Permalänk: https://www.webforum.nu/p/2143810

## #94 — Peter S, 2008-09-24T17:35Z

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

Permalänk: https://www.webforum.nu/p/2143811

## #95 — oskars, 2008-09-24T19:48Z

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

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

Permalänk: https://www.webforum.nu/p/2143839

## #96 — Peter S, 2008-09-24T19:52Z

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
```

Permalänk: https://www.webforum.nu/p/2143840

## #97 — oskars, 2008-09-24T19:54Z

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

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

Permalänk: https://www.webforum.nu/p/2143841

## #98 — Peter S, 2008-09-24T19:55Z

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

Permalänk: https://www.webforum.nu/p/2143843

## #99 — oskars, 2008-09-24T20:01Z

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!

Permalänk: https://www.webforum.nu/p/2143845

## #100 — Peter S, 2008-09-24T20:25Z

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 ;)

Permalänk: https://www.webforum.nu/p/2143854

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag/page5  
Föregående sida: https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag/page4.md  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag/page6.md
