---
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/page3"
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: 3
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 3 av 7._

## #41 — oskars, 2008-09-21T18:51Z

Hm... har skapat modulen som addTime nu, men den verkar ändå inte fungera.

Högst upp i koden:

```
Option Compare Database

Och sen följer koden som jag skrev i inlägget tidigare efter det här...
```

Får ändå \[Microsoft\]\[ODBC Microsoft Access Driver\] Undefined function 'addTime' in expression. Tycker att jag gjort allt rätt!

Jag kör Access 2007 eller vad det nu heter :D

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

## #42 — Peter S, 2008-09-21T19:00Z

Efter lite sökning på nätet verkar det inte som att det går att använda sig egendefinierade funktioner genom t.ex. ASP. Se exempelvis <http://www.ureader.com/message/1376557.aspx>.

Direkt i Access fungerar det däremot.

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

## #43 — oskars, 2008-09-21T19:21Z

Okej, men dåså, då går det inte. Jag kör ju genom ASP... :) Vet inte hur man använder Access för rapporter, tyvärr!

Tack som fan för hjälpen iaf!

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

## #44 — oskars, 2008-09-22T05:03Z

Hm... det måste vara fel någonstans...

Med följande fråga kan jag få ett resultat typ över 30st:

```
		RecSet.Open "SELECT Startdatum, SUM(iif((Starttid > '"&Starttid&"' and Starttid < '"&Sluttid&"') OR (Sluttid > '"&Starttid&"' and Sluttid < '"&Sluttid&"') " & _
					"OR (Starttid < '"&Starttid&"' and Starttid < '"&Sluttid&"' and Startdatum < Slutdatum) OR (Sluttid > '"&Starttid&"' and Sluttid > '"&Sluttid&"' and Startdatum < Slutdatum),1,0)) " & _
	  				"AS Tal FROM resor WHERE Weekday(Startdatum) = "&Request.Form("veckodag")&" AND NOT K1 = '06' AND NOT (K1 = '04' AND InStr(AC,'-')) GROUP BY Startdatum", Connect, 3, 3
```

Jag bifogar en bild som illustrerar hur frågan ska tänka. På bilden är 1st "resa" respresenterad av ett svart streck... det är alltså typ en tidslinje mellan t.ex 2200 och 2300 du ser på bilden. Maximalt är det 5st som pågår samtidigt då.

Har vi gjort fel i frågan någonstans?

Får fel resultat, och det börjar brinna i knutarna :O

Grejen är att det totalt bara kan finnas 16st "resor" som går samtidigt...

T.ex så får jag fram 2008-08-01 7st mellan "1200 - 1300" med denna frågan:

```
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "SELECT SUM(iif((Starttid > '"&Starttid&"' and Starttid < '"&Sluttid&"') OR (add_Sluttid > '"&Starttid&"' and add_Sluttid < '"&Sluttid&"') " & _
			"OR (Starttid < '"&Starttid&"' and Starttid < '"&Sluttid&"' and Startdatum < Slutdatum) OR (add_Sluttid > '"&Starttid&"' and add_Sluttid > '"&Sluttid&"' and Startdatum < Slutdatum),1,0)) " & _
				"AS Tal FROM resor WHERE Startdatum = #"&minDag("Startdatum")&"# AND NOT K1 = '06' AND NOT (K1 = '04' AND InStr(AC,'-'))", Connect, 3, 3
```

Sanningen är att det finns totalt 7st resor under denna tiden, MEN dom överlappar inte varandra.

Kolla bilden på datan i databasen jag bifogat. Där ser jag, om jag räknar rätt i min trötthet, att det verkar va maximalt 3st samtidigt. Dessa överlappar varandra:

3st:
12:38 - 12:43
12:41 - 12:47
12:44 - 12:49

2st:
12:51 - 12:56
12:52 - 13:08

Det är den maximala siffran, alltså "3st" som jag vill få ut :)

Får inte ordning på det själv :( Behöver vara färdig tills imorgon också. Blä blä blä!

Bilagor:

- [resor.GIF](https://www.webforum.nu/a/19197.gif)
- [merresor.JPG](https://www.webforum.nu/a/19198.jpg)

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

## #45 — oskars, 2008-09-22T06:10Z

\*se ovan\* :)

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

## #46 — oskars, 2008-09-22T16:52Z

Jag fattar typ hur man räknar ut huruvida t.ex dessa två resor överlappar varandra:

Resa 1. 15:06 - 15:30
Resa 2. 14:50 - 15:20

Men inte hur man automatiserar det i en SQL-fråga. Den frågan du gjort Peter fungerar säkert, men det är ändå något som är knas. Hoppas någon kan hjälpa mig!

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

## #47 — Peter S, 2008-09-22T18:24Z

Då skall vi se:

```
select max(dt.c)
  from ( select ( select count(*)+1 
                    from resor 
                   where ((starttid > d.starttid and starttid < d.sluttid)
                      or (sluttid > d.starttid and ((sluttid < d.sluttid and slutdatum = d.startdatum)
                      or (sluttid > d.sluttid and slutdatum < d.slutdatum))))
                     and startdatum = d.startdatum
                     and K1 = '06'
                     and not (K1 = '04' AND InStr(AC,'-'))) as c
           from resor d
          where d.startdatum = 20080801
            and K1 = '06'
            and not (K1 = '04' AND InStr(AC,'-'))) dt
```

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

## #48 — oskars, 2008-09-22T18:27Z

Nu blir jag nervös!!!

Måste testa direkt!!!!!!

Tack!!!! Återkommer när testet är gjort!

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

## #49 — oskars, 2008-09-22T18:32Z

Det ska ju vara mellan utvalda klockslag också   :q  Kan man lägga till det?

EDIT: Och datumet är i formatet ÅÅÅÅ-MM-DD... Men det är väl bara att ändra i where d.Startdatum = 20080801

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

## #50 — Peter S, 2008-09-22T18:36Z

Ja, just det ;) Typ så här då:

```
select max(dt.c)
  from ( select ( select count(*)+1 
                    from resor 
                   where ((starttid > d.starttid and starttid < d.sluttid)
                      or (sluttid > d.starttid and ((sluttid < d.sluttid and slutdatum = d.startdatum)
                      or (sluttid > d.sluttid and slutdatum < d.slutdatum))))
                     and startdatum = d.startdatum
                     and K1 = '06'
                     and not (K1 = '04' AND InStr(AC,'-'))) as c
           from resor d
          where d.startdatum = #2008-08-01#
            and starttid > 1200
            and sluttid < 1300
            and K1 = '06'
            and not (K1 = '04' AND InStr(AC,'-'))) dt
```

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

## #51 — oskars, 2008-09-22T18:37Z

Jag får följande meddelande av följande fråga:

```
			Set RecSet = Server.CreateObject("ADODB.Recordset")
			RecSet.Open "select max(dt.c) from ( select ( select count(*)+1 from resor where ((Starttid > d.Starttid and Starttid < d.Sluttid) or (Sluttid > d.Starttid and ((Sluttid < d.Sluttid and Slutdatum = d.Startdatum) or (Sluttid > d.Sluttid and Slutdatum < d.Slutdatum)))) and Startdatum = d.Startdatum and K1 = '06' and not (K1 = '04' AND InStr(AC,'-'))) AS c FROM resor d where Weekday(d.Startdatum) = "&Request.Form("veckodag")&" and K1 = '06' and not (K1 = '04' AND InStr(AC,'-'))) dt", Connect, 3, 3
```

ADODB.Recordset error '800a0cc1' 
Item cannot be found in the collection corresponding to the requested name or ordinal. 

/test.asp, line 182

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

## #52 — Peter S, 2008-09-22T18:38Z

Sedan returnerar inte InStr() true eller false, utan en siffra: om '-' skall finnas i AC bör du skriva InStr() \> 0, annars InStr() = 0.

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

## #53 — Peter S, 2008-09-22T18:39Z

Finns Request.Form("veckodag")? Annars, vad får du om du skriver ut SQL:en?

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

## #54 — oskars, 2008-09-22T18:41Z

("veckodag") finns och visar korrekt data (alltså 1-7)...

Ska visa dig den utskrivna SQLen strax efter mina ny tester...

Du är min hjälte!

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

## #55 — Peter S, 2008-09-22T18:46Z

Du får förmodligen felet när du skriver ut med RecSet("..."). Använd antingen RecSet(0) eller:

```
select max(dt.c) as foo from...

RecSet("foo")
```

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

## #56 — oskars, 2008-09-22T18:50Z

Utskriven:

```
SELECT max(dt.c) FROM ( SELECT ( SELECT COUNT(*)+1 FROM allingsas WHERE ((Starttid > d.Starttid AND Starttid < d.Sluttid) OR (Sluttid > d.Starttid AND ((Sluttid < d.Sluttid AND Slutdatum = d.Startdatum) OR (Sluttid > d.Sluttid AND Slutdatum < d.Slutdatum)))) AND Startdatum = d.Startdatum AND K1 = '06' AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) as c FROM allingsas d WHERE Weekday(d.startdatum) = 2 AND Starttid > '1000' AND Sluttid < '1100' AND K1 = '06' AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) dt
```

nu har jag istället problem med att skriv ut resultatet. Den säger att "Item cannot be found in the collection corresponding to the requested name or ordinal." när jag försöker skriva ut RecSet("c")... för det är väl "AS c"?
**EDIT: Jag såg ditt tidigare inlägg nu. Tack!**

Måste bara fråga... kommer den frågan returnera alla t.ex Måndagar (om man väljer det), så här:

Måndagar, mellan 1100 och 1200:

2008-01-07: 3st
2008-01-14: 2st
2008-01-21: 4st
osv...

EDIT: Jag darrar, tänk om vi får det att funka!

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

## #57 — Peter S, 2008-09-22T18:57Z

Japp :)

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

## #58 — oskars, 2008-09-22T18:59Z

Jo. Nu räknar den ett tal åt mig... Får fram "18" när jag söker 1000 - 1100 på Måndagar... Antar att den sammanfattar över hela tabellen typ?

Jag får med andra ord fram enbart ett tal.. inget datum som talet gäller...

Går det att sammanfatta det så som jag skrev i inlägget över detta? Ska jag kanske bara göra en SELECT DISTINCT Startdatum WHERE Weekday(Startdatum) = "&Veckodag&" typ? Och sen lägga din nya fråga innanför den loopen och köra WHERE Startdatum = RecSet("Startdatum") typ?

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

## #59 — Peter S, 2008-09-22T19:07Z

Jag måste revidera mitt inlägg ovan litet :) Nej, den listar inte alla måndagar. Men nedanstående gör det:

```
SELECT max(dt.c) 
  FROM ( SELECT ( SELECT COUNT(*)+1 
                    FROM allingsas 
                   WHERE ((Starttid > d.Starttid AND Starttid < d.Sluttid) 
                      OR (Sluttid > d.Starttid AND ((Sluttid < d.Sluttid AND Slutdatum = d.Startdatum) 
                      OR (Sluttid > d.Sluttid AND Slutdatum < d.Slutdatum)))) 
                     AND Weekday(Startdatum) = 2
                     AND K1 = '06' 
                     AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) as c 
           FROM allingsas d 
          WHERE Weekday(d.startdatum) = 2 
            AND Starttid > '1000' 
            AND Sluttid < '1100' 
            AND K1 = '06' 
            AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) dt
```

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

## #60 — Peter S, 2008-09-22T19:12Z

Om även datum skall plockas ut:

```
SELECT d.startdatum
     , ( SELECT COUNT(*)+1 
           FROM allingsas 
          WHERE ((Starttid > d.Starttid AND Starttid < d.Sluttid) 
             OR (Sluttid > d.Starttid AND ((Sluttid < d.Sluttid AND Slutdatum = d.Startdatum) 
             OR (Sluttid > d.Sluttid AND Slutdatum < d.Slutdatum)))) 
            AND Weekday(Startdatum) = 2
            AND K1 = '06' 
            AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) as c 
  FROM allingsas d 
 WHERE Weekday(d.startdatum) = 2 
   AND Starttid > '1000' 
   AND Sluttid < '1100' 
   AND K1 = '06' 
   AND NOT (K1 = '04' AND InStr(AC,'-') > 0)) dt
```

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

---

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