Avatar billede fuxi Nybegynder
25. november 2003 - 08:21 Der er 5 kommentarer og
1 løsning

Lille datoproblem

Hejsa

Jeg håber der er nogen der kan hjælpe med dette lille datoproblem. Jeg skal lave en bannerstatistik, hvor jeg har gemt datoerne som datetime det vil sige at de f.eks. vil hedde "19-11-2003 10:00"

Mit problem er at jeg skal have trukket hver dag ud og så lave en count på hvor mange poster der er på den givne dag. Umiddelbart ingen problem, men jeg kan ikke finde ud af at få den til at nøjes med at kigge på datoen, den kigger også på klokken...

Min kode ser ud som følgende:

<table width="400" border="1" cellpadding="2" cellspacing="0">
    <tr>
        <td><b>Dato</b></td>
        <td><b>Visninger</b></td>
    </tr>
    <%
    sql = ""
    sql = sql & "SELECT DISTINCT DATEPART(dd, viewedDate) AS dDay, DATEPART(mm, viewedDate) AS dMonth, DATEPART(yyyy, viewedDate) AS dYear, "
    sql = sql & "(SELECT COUNT(*) FROM tm_banner_views WHERE viewedDate= bv.viewedDate) AS cnt "
    sql = sql & "FROM     dbo.tm_banner_views bv "
    sql = sql & "ORDER BY DATEPART(yyyy, viewedDate), DATEPART(mm, viewedDate), DATEPART(dd, viewedDate) "
    Set rsDates = dbCon.Execute(sql)
   
    While Not rsDates.eof
        Response.Write ("<tr>")
        Response.Write ("<td>" & rsDates("dDay") & "/" & rsDates("dMonth") & "-" & rsDates("dYear") & "</td>")
        Response.Write ("<td>" & rsCount("cnt") & "</td>")
        Response.Write ("</tr>")
        rsDates.MoveNext
    Wend
    %>
</table>


Jeg ved at min count del, skal have WHERE betingelsen ændret... Men det er for at illustrere hvad der skal søges på...
Avatar billede fuxi Nybegynder
25. november 2003 - 09:56 #1
Ups glemte lige at skrive at det er en MS SQL Server 2000 jeg bruger som database...
Avatar billede chriscross Nybegynder
25. november 2003 - 10:26 #2
Hvor får du dine to datoer fra i din wheredel ?
Hvis du bruger den indbyggede sql-funktion datediff med dd som første argument vil den teste år, måned og dag for dig:
where datediff(dd,dato1,getdate()) = 0
- her er dato1 eks. dit datetimefelt og getdate er endnu en indbygget sql-funktion der henter dags dato til dig.
Avatar billede fuxi Nybegynder
25. november 2003 - 12:11 #3
Jamen i den anden sql får jeg jo datoen fra den første... Jeg har ikke brugt datediff før så det er da meget muligt at det er den jeg skal bruge

Men jeg har jo ikke noget at bruge getDate() til i dette tilfælde, da jeg ønsker at trække alle forskellige datoer ud fra min tabel, hvor jeg så kan se hvor mange visninger der har været pr. dag.

Det vil sige at resultatet gerne skulle blive noget i retningen af:

------------------
19-11-2003 || 2300
------------------
20-11-2003 || 3120
------------------
21-11-2003 || 2912
------------------

Etc. etc.
Så min sql skulle gerne minde lidt om følgende:

SELECT DISTINCT(bv.viewedDate) myDate, (SELECT COUNT(*) FROM banner_views WHERE viewedDate=bv.viewedDate) AS cnt
FROM banner_views bv
ORDER BY bv.viewedDate
Avatar billede chriscross Nybegynder
25. november 2003 - 12:16 #4
Jamen så erstatter du bare getdate() med den anden dato, altså
where datediff(dd,bv.viewedDate,viewedDate) = 0

prøv at sæt ovenstående ind i stedet for:viewedDate=bv.viewedDate
og kør den i din queryanalyzer
Avatar billede fuxi Nybegynder
25. november 2003 - 12:35 #5
Super det virker efter hensigten.. Men ok den har lige lidt problemer med timeout på SQL Serveren.. lidt for mange poster :O)
Avatar billede chriscross Nybegynder
25. november 2003 - 12:40 #6
Godt nok - så vidt jeg er orienteret er det ikke datediff() der giver problemer rent performancemæssigt - de indbyggede funktioner skulle være ret hurtige..

Har du noget index på dine tabeller, ikke fordi jeg ved specielt meget om indexering af tabeller ( hvordan ) men jeg vi tro en indexering af de datoer du spørger på vil kunne hjælpe lidt på performance. Du kan prøve at hjjreklikke på din tabel i Enterproce Manager der skulle så være noget der hedder "manage indexes" eller noget i den retning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester