webForumDet fria alternativet

Krånglig fråga med klockslag!

Databaser & SQLur Databashanterare & SQL

131 svar · 4 120 visningar · startad av oskars · sida 6 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 nov. 20051 317 inlägg
#101

Närå! Det behöver du inte. Löser det nog genom att bara köra det lokalt istället! :) Du gör nog med frågan!

Har bara spånat igenom lite snabbt hittills... Ser bra ut tror jag? ... Ska be en annan ansvarig kolla igenom det också för att se så det stämmer, och så att jag inte missar något! Har du kollat något?

Medlem sedan dec. 20025 483 inlägg
#102

Jag tror frågan skulle kunna göras både enklare och effektivare om i databasen startdatum och starttid slogs ihop till ett datumfält, och slutdatum och sluttid slogs ihop till ett datumfält.

[Edit]
Jag har kollat igenom några poster och tycker det ser rätt ut.

Medlem sedan nov. 20051 317 inlägg
#103

okej... Förlåt att den är sån asså :( Jag ska försöka bygga om den efter att första arbetet av databasen är utfört med den nuvarande frågan.

Näeh nu måste jag sova. Jag har datum och tider på näthinna nu!

Bra jobbat iaf! Själv försöker jag komma på lösningar, och testar lite i koden, men du bräcker mig alltid :D

EDIT: aha, såg din EDIT nu :) Jo, jag börjar också komma till den insikten. Har kollat igenom några datum vid midnatt... Fan asså... Du är grym!

Medlem sedan nov. 20051 317 inlägg
#104

hm... nä.... det funkar ibland och ibland inte... får inte rätsida på det...

Hajjar inte vart den röda tråden är...

Ska göra om formatet till det korrekta... vad tror du om det?

EDIT: När vi kontrollerat här så verkar det vara något med korta resor som inte får vara med... ibland....

EDIT: Det kan vara datafel i tabellen som orsakar felen...... Om man gör om frågan så den funkar med riktigt datumformat ... är den en bagatell då?

EDIT 20:15: Det verkar vara datafel eftersom felen inte är exakta varje gång. Dom är inte konstanta. Det blir till att slipa på datan istället! Om inte du hittar något! :stud

Medlem sedan dec. 20025 483 inlägg
#105

Jag tror det blir mycket enklare om dagens fyra fält slås samman till totalt två fält i stället :)

Medlem sedan nov. 20051 317 inlägg
#106

Jo, jag med... har gjort det så nu... men har inte tid att jobba med det själv just nu. Jag återupptar mitt arbete vid typ 23:30 eller nått.. och arbetar vidare med det imorgon tidigt.. måste bli färdig tills på söndag

Jag kör fortfarande med gamla formatet, men det nya kommer se ut så här:
Slut: 2008-01-01 08:30:00
Start: 2008-01-01 08:30:00

Inte mkt mer än det.

Erbjudandet ligger fortfarande kvar, så du vet!

Medlem sedan nov. 20051 317 inlägg
#107

...men eftersom frågan fungerar helt korrekt på vissa tider... så måste det ju vara datan det är fel på?

Med andra ord = Frågan fungerar helt rätt!

? :)

Medlem sedan dec. 20025 483 inlägg
#108

Om de nya datumena sparas i start resp. slut, skulle jag vilja skriva så här:

select dt.s, max(dt.c)
from
(
select a.start as s
     , ( select count(*) + 1
           from allingsas
          where id <> a.id
            and start > #2008-01-01 23:00:00#
            and slut < #2008-01-02 01:00:00#
            and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
  from allingsas a
 where weekday(a.start) = 3
   and a.start > #2008-01-01 23:00:00#
   and a.slut < #2008-01-02 01:00:00#
) as dt
group
    by dt.s
Medlem sedan nov. 20051 317 inlägg
#109

Fan va vacker den blev :)

Det jag fungerar på är hur fan du lyckas göra sökningen på ALLA poster på utvalt datum och tid. Som jag ser det så görs bara sökningar på 2st poster... Fast jag vet ju att du gjort rätt!

Btw, den gamla koden... Den returnerar ibland 0 och ibland inget datum alls... funderar lite på varför ...

Om jag vill ha "mindre eller lika med" så är det väl bara att göra så här?

Peter S skrev:

select dt.s, max(dt.c)
from
(
select a.start as s
     , ( select count(*) + 1
           from allingsas
          where id <> a.id
            and start >= #2008-01-01 23:00:00#
            and slut <= #2008-01-02 01:00:00#
            and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
  from allingsas a
 where weekday(a.start) = 3
   and a.start >= #2008-01-01 23:00:00#
   and a.slut <= #2008-01-02 01:00:00#
) as dt
group
    by dt.s
Medlem sedan nov. 20051 317 inlägg
#110

Försöker få ordning på den men i frågan vill den ju ha både TID och DATUM från forumläret.. jag kommer bara mata in TID från formuläret.. så ska den leta igenom alla datumen

EDIT: Ska det inte stå COUNT(*)+1 istället för COUNT(*) i senaste frågan som inte den frågan med datumformatet?

EDIT: Det krisar. Frågan funkar inte. Antar att det bästa är att gå över till frågan med det riktiga datumformatet.

Medlem sedan nov. 20051 317 inlägg
#111

Försöker mig på den nya frågan:

Veckodag = Request.Form("veckodag")
	Starttid = "10:00:00"
	Sluttid = "11:00:00"
	
	select dt.s, max(dt.c)
		from (
			select a.new_Start as s, ( 
				select count(*)+1 
				from allingsas 
				where id <> a.id 
				and new_Start > #"&Starttid&"# 
				and new_Slut < #"&Sluttid&"# 
				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) = "&Veckodag&" 
			and a.new_Start > #"&Starttid&"# 
			and a.new_Slut < #"&Sluttid&"#) as dt 
	group by dt.s

	Do Until RecSet.EOF
	
		Response.Write("<tr style=""background-color:#"&Color&"""><td width=""100"">"&RecSet("s")&"</td><td width=""10"">;</td><td>"&RecSet("c")&"</td></tr>")

osv osv

Den returnerar dock ingenting ;)

Så här ser den ut, utskriven:

select dt.s, max(dt.c) from (select a.new_Start as s, ( select count(*)+1 from allingsas where id <> a.id and new_Start > #10:00:00# and new_Slut < #11:00:00# 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 and a.new_Start > #10:00:00# and a.new_Slut < #11:00:00#) as dt group by dt.s

:)

Medlem sedan dec. 20025 483 inlägg
#112

Hej Oskar,

Titta på mitt senaste förslag, där jämförs start resp. slut med kompletta datumtidsstämplar. I ditt senaste försök kan jag bara se att tiden är med.

Medlem sedan nov. 20051 317 inlägg
#113

Hej Peter!

Tack för att du lever!

Jag såg att du både använde datum + tid! Men jag matar ju inte in något datum från formuläret?

Ska jag göra en loop utanför denna frågan som loopar igenom varje Måndag och skriver in variabeln i SQL-frågan?

EDIT: Tror du... att det här kommer gå vägen?

Medlem sedan dec. 20025 483 inlägg
#114

Ja, just det, tror du att du kan dela upp tiden på timmar och minuter? Så i stället för att mata in '13:24:00' så bryter du ut '13' och '24' och konverterar dem till tal:

select dt.s, max(dt.c)
from
(
select a.start as s
     , ( select count(*) + 1
           from allingsas
          where id <> a.id
            and ((hour(start) = 12 and minute(start) >= 0) or hour(start) > 12)
            and (((hour(slut) = 13 and minute(slut) <= 0) or hour(slut) < 13) or (13 < 12 and hour(slut) > 12))
            and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
  from allingsas a
 where weekday(a.start) = 3
   and ((hour(a.start) = 12 and minute(a.start) >= 0) or hour(a.start) > 12)
   and (((hour(a.slut) = 13 and minute(a.slut) <= 0) or hour(a.slut) < 13) or (13 < 12 and hour(a.slut) > 12))
) as dt
group
    by dt.s

Ovan skall hour(a.start) jämföras med timmen för starttiden, minute(a.start) med minuterna för starttiden, hour(a.slut) med timmen för sluttiden och minute(a.slut) med minuterna för sluttiden. :)

Medlem sedan nov. 20051 317 inlägg
#115

Tack!

Återkommer efter test!

Medlem sedan nov. 20051 317 inlägg
#116

Den säger ändå att [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.... Jag har angett alla kolumnnamn korrekt...

	RecSet.Open "select dt.s, max(dt.c) from (select a.new_Start as s, ( select count(*) + 1 from allingsas where id <> a.id and ((hour(new_Start) = "&startHour&" and minute(new_Start) >= "&startMinute&") or hour(new_Start) > "&startHour&") and (((hour(new_Slut) = "&slutHour&" and minute(new_Slut) <= "&slutMinute&") or hour(new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(new_Slut) > "&startHour&")) 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) = "&Veckodag&" and ((hour(a.new_Start) = "&startHour&" and minute(s.new_Start) >= "&startMinute&") or hour(a.new_Start) > "&startHour&") and (((hour(a.new_Slut) = "&slutHour&" and minute(a.new_Slut) <= "&slutMinute&") or hour(a.new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(a.new_Slut) > "&startHour&"))) as dt group by dt.s", Connect, 3, 3

Det känns taskigt att returnera frågan så där fult utan radbrytningar när du spaltar upp den så fint från början... ska jag istället lägga in din fråga med samma radbrytningar med " & _ i koden istället kanske?

EDIT: Lite kod ovanför frågan:

	startHour = CInt(Request.Form("startHour"))
	startMinute = CInt(Request.Form("startMinute"))
	
	slutHour = CInt(Request.Form("slutHour"))
	slutMinute = CInt(Request.Form("slutMinute"))
	
	Veckodag = Request.Form("veckodag")
Medlem sedan dec. 20025 483 inlägg
#117

Ja, skriv hellre ut med radbrytningar :)

Hur ser frågan ut om du skriver ut den med response.write?

Medlem sedan nov. 20051 317 inlägg
#118
	RecSet.Open "select dt.s, max(dt.c) " & _
				"from (select a.new_Start as s, " & _
				"( select count(*) + 1 " & _
				"from allingsas where id <> a.id " & _
				"and ((hour(new_Start) = "&startHour&" and minute(new_Start) >= "&startMinute&") or hour(new_Start) > "&startHour&") " & _
				"and (((hour(new_Slut) = "&slutHour&" and minute(new_Slut) <= "&slutMinute&") or hour(new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(new_Slut) > "&startHour&")) " & _
				"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) = "&Veckodag&" " & _
				"and ((hour(a.new_Start) = "&startHour&" and minute(s.new_Start) >= "&startMinute&") or hour(a.new_Start) > "&startHour&") " & _
				"and (((hour(a.new_Slut) = "&slutHour&" and minute(a.new_Slut) <= "&slutMinute&") or hour(a.new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(a.new_Slut) > "&startHour&"))) " & _
				"as dt group by dt.s", Connect, 3, 3

Utskriven:

select dt.s, 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) = 7 and ((hour(a.new_Start) = 12 and minute(s.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 dt.s
Medlem sedan dec. 20025 483 inlägg
#119

Jag har redigerat min senaste kodpostning; det var ett felstavat alias som ställde till det :)

Dock returnerar inte frågan några resultat. Jag får felsöka det.

Medlem sedan nov. 20051 317 inlägg
#120

Aha... jag missade det där lilla S'et :)

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