webForumDet fria alternativet

Skulle vilja veta hur många datum som är registrerade per månad.

Databaser & SQL

5 svar · 298 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Kan man på något sätt få antal registrerade datum i en månad.

Typ:

 select datum, (.....) as antDatumPerManad

Utskrift ska bli:

datum antal reg i månad
2005-10-16 3
2005-10-22
2005-10-26
2005-11-10 2
2005-11-12 2

Det ska alltså bara srivas ut antal registrerade datum för det första datumet.

Är även öppen för andra förslag
Det jag vill åstadkomma är en tabell som har den första raden med mergade celler för månaden. Ska alltså använda talet till att sätta colspan="tal"
Typ:

----------------------------------------------------------------
|              oktober            |            november        |
----------------------------------------------------------------
|   16    |    22    |     26     |      10       |     12     |
----------------------------------------------------------------
Medlem sedan juni 20034 013 inlägg
#2

Vill du ha ut antalet registrerade per dag?

SELECT datum, COUNT(*) as antal FROM tabell GROUP BY datum ORDER BY datum

Medlem sedan juni 20034 013 inlägg
#3

Aha, nu förstod jag vad du ville... ögonblick...

SELECT datum, COUNT(*) as antalPerManad FROM tabell GROUP BY SUBSTRING(datum, 1, 7) ORDER BY datum

Fast det ger bara ett datum per månad... hmm...

Medlem sedan jan. 20013 406 inlägg
#4

Jag löste det i applikationen i stället för i sql-satsen.

Medlem sedan juni 200032 967 inlägg
#5

tydal skrev:

SELECT datum, COUNT(*) as antalPerManad FROM tabell GROUP BY SUBSTRING(datum, 1, 7) ORDER BY datum

Man skall aldrig använda strängfunktioner på datumvärden. Använd de datum-funktioner som finns tillgängliga i SQL. Man kan ju inte vara säker på i vilket format datumen är sparade i databasen...

Jag löste det i applikationen i stället för i sql-satsen.

Ok, du loopar alltså igenom och räknar i applikationen? Låter inte som en optimal lösning, men är det så du vill ha det, så...

Medlem sedan jan. 20013 406 inlägg
#6

@nders skrev:

Ok, du loopar alltså igenom och räknar i applikationen? Låter inte som en optimal lösning, men är det så du vill ha det, så...

Jag ska ändå skriva ut allting från databasen så det spelar inte så stor roll. Loopar bara igenom en gång.

Koden är inte så snygg men jag tror inte att den är så resurskrävande.

While not  lektionerRS.Eof
  lektionDatum = lektionerRS("lektionDatum")
  If raknare = 0 Then
	  curMonth = monthName(month(lektionDatum))
		curYear = left(lektionDatum,4)
		colspanMonth = -1
		colspanYear = -1
	End If
	
	If left(lektionDatum,4) = curYear Then
    colspanYear = colspanYear + 1
	Else
	  strTDYear = strTDYear & "    <td colspan="""& colspanYear+1 &""" style=""text-align: center; background-color: "& yearColor(yRaknare) &""">"& curYear &"</td>" &vbcrlf
		curYear = left(lektionDatum,4)
		colspanYear = 0
		yRaknare = yRaknare + 1
	End If 

  If monthName(month(lektionDatum)) = curMonth Then
    colspanMonth = colspanMonth + 1
	Else
	  strTDMonth = strTDMonth & "    <td colspan="""& colspanMonth+1 &""" style=""text-align: center; background-color: "& monthColor(curMonth) &""">"& curMonth &"</td>" &vbcrlf
		curMonth = monthName(month(lektionDatum))
		colspanMonth = 0
	End If

  If raknare mod 2 = 0 Then
	  bgColor = "#F3F3F3"
	Else
		bgColor = "#FFFFFF"
	End If
  
  
  LektionDag = Left(weekdayName(weekday(lektionDatum)),3)
  LektionDag = Ucase(left(LektionDag, 1))& Mid(LektionDag, 2) & "&nbsp;" & cINT(Mid(lektionDatum, 9, 2)) & "&nbsp;" & monthName(month(lektionDatum), true)
  Klockslag = Mid(lektionDatum, 12, 5)
	KlockslagSlut = Mid(dateAdd("n", lektionerRS("lektionLangd"), lektionDatum), 12, 5)
  

  strTDDag = strTDDag & "    <td class=""writeVertical"" style=""text-align: center; width: 60px; background-color: "& bgColor &"; cursor: default;"">"& (LektionDag&"<br>kl:&nbsp;" & Klockslag) &"</td>" &vbcrlf

  raknare = raknare + 1
	lektionerRS.MoveNext 
Wend 
strTDYear = strTDYear & "    <td colspan="""& colspanYear+1 &""" style=""text-align: center; background-color: "& yearColor((yRaknare)) &""">"& curYear &"</td>" &vbcrlf
strTDMonth = strTDMonth & "    <td colspan="""& colspanMonth+1 &""" style=""text-align: center; background-color: "& monthColor(curMonth) &""">"& curMonth &"</td>" &vbcrlf

Response.write("<table style="" "" border=""1"" cellspacing=""0"" cellpadding=""0"">" &vbcrlf)
Response.write("  <tr>" &vbcrlf)
Response.write("<td rowspan=""3"">&nbsp;</td>"&vbcrlf)
Response.write(strTDYear)
Response.write("  </tr>" &vbcrlf)
Response.write("  <tr>" &vbcrlf)
Response.write(strTDMonth)
Response.write("  </tr>" &vbcrlf)
Response.write("  <tr>" &vbcrlf)
Response.write(strTDDag)
Response.write("  </tr>" &vbcrlf)
lektionerRS.Close : Set lektionerRS = Nothing
Response.write("</table>" &vbcrlf)
  %>
267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)