| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | SQL sætning - problem. Fra : SpookiePower | 
  Dato :  21-12-07 12:44 |  
  |   
            
 Jeg har en SQL sætning der tæller hvor mange rapporter(antal)
 der forekommer mellem kl 0 til 5 og gruppere
 dem i dage. Min sætning ser således ud -
 
 SELECT DateValue(daReportDate) AS Dato, Count(daReportDate) AS Antal
 FROM TReport
 WHERE hour(daReportDate) between 0 and 5
 GROUP BY DateValue(daReportDate)
 ORDER BY count(daReportDate) DESC;
 
 Jeg vil nu gerne have talt hvor mange dage om året, der forekommer
 en eller flere rapporter i dette tidsrum. Antallet af
 rapporter er ligegyldigt.
 
 Jeg går ud fra at det er en blanding af GROUP og ORDER
 linerne jeg skal ændre på, men jeg er fuldstændigt blank.
 
 Kan i hjælpe her ?
  
            
             |   |   
            
        
 
            
         
           SpookiePower (21-12-2007) 
         
	
            | Kommentar Fra : SpookiePower | 
  Dato :  21-12-07 13:18 |  
  |   
            Jeg er kommet et lille skridt videre, men nu sidder jeg fast.
 Det er lykkedes mig at få de dage frem, som har en eller
 flere rapporter i det valgte tidsrum -
 
 SELECT datevalue(daReportDate)
 FROM TReport
 WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 Group by datevalue(daReportDate)
 
 Men denne sætning viser datoerne, den kommer ikke med
 et tal, som tæller disse dage.
 
 Kan i hjælpe her ?
  
            
             |   |   
            
        
 
            
         
           Peter Lykkegaard (21-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  21-12-07 14:35 |  
  |   
            SpookiePower wrote:
 >
 > Kan i hjælpe her ?
 
 Hvilket rdbms?
 
 Du kan evt lægge ud med at kikke på count
 
 - Peter
 
 -- 
 Hi! I'm a .signature *virus*!
 Copy me into your ~/.signature to help me spread! 
 
 
  
            
             |   |   
            
        
 
            
         
            SpookiePower (21-12-2007) 
         
	
            | Kommentar Fra : SpookiePower | 
  Dato :  21-12-07 14:45 |  
  |   
            Peter Lykkegaard wrote:
 
 > Hvilket rdbms?
 > 
 > Du kan evt lægge ud med at kikke på count
 
 Access 2003.
 
 Jeg har kigget på count(*), men uden held.
 
 
 
 Jeg har forsøgt mig på denne måde -
 
 SELECT count(*)
 FROM TReport
 WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 
 Men der tæller den jo samtlige records, som forekommer mellem kl 00 til 05.
 
 
 
 Prøver jeg på denne måde -
 
 SELECT count(*)
 FROM TReport
 WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 GROUP BY datevalue(daReportDate);
 
 Så grupperes der i dage, og det er disse dage jeg skal have tal på.
 Men jeg er stået af nu. Løsningen er sikkert simple, men jeg er blank.
  
            
             |   |   
            
        
 
            
         
             Peter Lykkegaard (21-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  21-12-07 16:18 |  
  |   
            
"SpookiePower" wrote
 > Access 2003.
 >
 Der er en ms-access undergruppe
 Men problemstillingen er rimelig generel
 > Jeg har kigget på count(*), men uden held.
 >
 Forklaring på count
 http://www.techonthenet.com/sql/count.php
http://www.techonthenet.com/access/functions/numeric/count.php
> Jeg har forsøgt mig på denne måde -
 >
 > SELECT count(*)
 > FROM TReport
 > WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 >
 > Men der tæller den jo samtlige records, som forekommer mellem kl 00 til 
 > 05.
 Yes du _skal_ have en group by på
 http://www.techonthenet.com/sql/group_by.php
> Prøver jeg på denne måde -
 >
 > SELECT count(*)
 > FROM TReport
 > WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 > GROUP BY datevalue(daReportDate);
 >
 Hvorfor bruger du funktionen DateValue?
 Kik evt på DatePart
 http://www.techonthenet.com/access/functions/date/datepart.php
> Så grupperes der i dage, og det er disse dage jeg skal have tal på.
 > Men jeg er stået af nu. Løsningen er sikkert simple, men jeg er blank.
 Hvad er resultatet af den sidste forespørgsel?
 - Peter
            
              |   |   
            
        
 
            
         
              Kristian Damm Jensen (22-12-2007) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  22-12-07 06:02 |  
  |  
 
            Peter Lykkegaard wrote:
 > "SpookiePower" wrote
 >
 >> Access 2003.
 >>
 > Der er en ms-access undergruppe
 > Men problemstillingen er rimelig generel
 >
 >> Jeg har kigget på count(*), men uden held.
 >>
 > Forklaring på count
 >  http://www.techonthenet.com/sql/count.php
>  http://www.techonthenet.com/access/functions/numeric/count.php
>
 >> Jeg har forsøgt mig på denne måde -
 >>
 >> SELECT count(*)
 >> FROM TReport
 >> WHERE (hour(daReportDate) between 0 and 5) and
 >> (year(daReportDate)=2007) Men der tæller den jo samtlige records, som 
 >> forekommer mellem kl 00
 >> til 05.
 >
 > Yes du _skal_ have en group by på
 >  http://www.techonthenet.com/sql/group_by.php
Nej.
 Group by er ikke en nødvendighed for at bruge count(). Den simpleste 
 anvendelse af count er at optælle antallet af records i en tabel:
 select count(*) from T
 Men det er sjældent man har brug for en forespørgsel hvor man skal optælle 
 uden at gruppere. Det er imidlertid tilfældet her, da man blot skal finde 
 "hvor mange dage om året, der forekommer en eller flere rapporter i dette 
 tidsrum".
 <snip>
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
            
              |   |   
            
        
 
            
         
               Peter Lykkegaard (22-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  22-12-07 11:20 |  
  |   
            "Kristian Damm Jensen" wrote
 
 > Men det er sjældent man har brug for en forespørgsel hvor man skal optælle 
 > uden at gruppere. Det er imidlertid tilfældet her, da man blot skal finde 
 > "hvor mange dage om året, der forekommer en eller flere rapporter i dette 
 > tidsrum".
 >
 Fra OP:
 
 "Jeg har en SQL sætning der tæller hvor mange rapporter(antal)
 der forekommer mellem kl 0 til 5 og gruppere
 dem i dage"
 
 - Peter
 
  
            
             |   |   
            
        
 
            
         
                Kristian Damm Jensen (22-12-2007) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  22-12-07 16:47 |  
  |   
            Peter Lykkegaard wrote:
 > "Kristian Damm Jensen" wrote
 >
 >> Men det er sjældent man har brug for en forespørgsel hvor man skal
 >> optælle uden at gruppere. Det er imidlertid tilfældet her, da man
 >> blot skal finde "hvor mange dage om året, der forekommer en eller
 >> flere rapporter i dette tidsrum".
 >>
 > Fra OP:
 >
 > "Jeg har en SQL sætning der tæller hvor mange rapporter(antal)
 > der forekommer mellem kl 0 til 5 og gruppere
 > dem i dage"
 
 Ja. Det er hvad han har.
 
 "Jeg vil nu gerne have talt hvor mange dage om året, der forekommer
 en eller flere rapporter i dette tidsrum. "
 
 Det er hvad den nye SQL skal gøre. Ét tal.
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
                 Peter Lykkegaard (22-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  22-12-07 19:58 |  
  |   
            "Kristian Damm Jensen" wrote
 
 > Det er hvad den nye SQL skal gøre. Ét tal.
 >
 
 Hmm :)
 
 tak/Peter 
 
  
            
             |   |   
            
        
 
            
         
              SpookiePower (22-12-2007) 
         
	
            | Kommentar Fra : SpookiePower | 
  Dato :  22-12-07 13:33 |  
  |  
 
            Peter Lykkegaard wrote:
 > Yes du _skal_ have en group by på
 >  http://www.techonthenet.com/sql/group_by.php
Det håbede jeg også på var rigtigt.
 > Hvorfor bruger du funktionen DateValue?
 > Kik evt på DatePart
 >  http://www.techonthenet.com/access/functions/date/datepart.php
DatePart har jeg ikke hørt om. DateValue piller datoen ud af
 det format jeg har valgt. I mit felt daReportDate står dato+tid
 således 31-08-2005 15:08:00, og det er kun datoen jeg skal bruge.
 >> Så grupperes der i dage, og det er disse dage jeg skal have tal på.
 >> Men jeg er stået af nu. Løsningen er sikkert simple, men jeg er blank.
 > 
 > Hvad er resultatet af den sidste forespørgsel?
 Min sidste forespørgelse ser sådan ud -
 10-12-2007   4
 11-12-2007   12
 15-12-2007   5
 Her kan man se at der er 3 dage, hvor der forekommer
 en eller flere records mellem klokken 0 til 5.
 Men det er ikke denne liste jeg er interesserede i.
 Det er tallet 3, jeg gerne vil have frem. Det er det
 tal jeg skal bruge senere hen.
            
              |   |   
            
        
 
            
         
           Kristian Damm Jensen (21-12-2007) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  21-12-07 16:07 |  
  |   
            SpookiePower wrote:
 > Jeg er kommet et lille skridt videre, men nu sidder jeg fast.
 > Det er lykkedes mig at få de dage frem, som har en eller
 > flere rapporter i det valgte tidsrum -
 >
 > SELECT datevalue(daReportDate)
 > FROM TReport
 > WHERE (hour(daReportDate) between 0 and 5) and
 > (year(daReportDate)=2007) Group by datevalue(daReportDate)
 >
 > Men denne sætning viser datoerne, den kommer ikke med
 > et tal, som tæller disse dage.
 
 
 Du er næsten i mål. Men:
 
 group by er overflødig i denne konstruktion. Med mindre du bruger den til at 
 fjerne dubletter, i hvilket tilfælde den stilrene måde er at bruge distinct:
 
 SELECT distinct datevalue(daReportDate)
 FROM TReport
 WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 
 Da vi nu har fået fjernet group by, er det muligt at bruge count uden at det 
 relateres til group by. Sådan:
 
 SELECT count(distinct datevalue(daReportDate))
 FROM TReport
 WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 
 >
 > Kan i hjælpe her ?
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
            SpookiePower (22-12-2007) 
         
	
            | Kommentar Fra : SpookiePower | 
  Dato :  22-12-07 13:37 |  
  |   
            Kristian Damm Jensen wrote:
 
 > SELECT count(distinct datevalue(daReportDate))
 > FROM TReport
 > WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 
 Nu ligner det noget af det jeg søger. Mange tak :)
 Men jeg får fejle -
 "Der er en syntaks fejl fordi der mangler en operator i udtrykket 
 count(distinct datevalue(daReportDate))"
  
            
             |   |   
            
        
 
            
         
             Peter Lykkegaard (22-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  22-12-07 15:05 |  
  |   
            "SpookiePower" wrote
 > Kristian Damm Jensen wrote:
 >
 >> SELECT count(distinct datevalue(daReportDate))
 >> FROM TReport
 >> WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
 >
 > Nu ligner det noget af det jeg søger. Mange tak :)
 > Men jeg får fejle -
 > "Der er en syntaks fejl fordi der mangler en operator i udtrykket 
 > count(distinct datevalue(daReportDate))"
 
 Det anede mig at Access muligvis ville have det lidt svært med den 
 konstruktion
 
 Prøv evt dette
 
 SELECT count(*)  as AntalDage FROM (
     SELECT distinct datevalue(daReportDate)
     FROM TReport
     WHERE (hour(daReportDate) between 0 and 5) and (year(daReportDate)=2007)
     )
 
 Jeg har testet ovenstående af i Access 2003 og det giver AntalDage = 3
 
 - Peter 
 
  
            
             |   |   
            
        
 
            
         
              Kristian Damm Jensen (22-12-2007) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  22-12-07 16:57 |  
  |   
            Peter Lykkegaard wrote:
 > "SpookiePower" wrote
 >> Kristian Damm Jensen wrote:
 >>
 >>> SELECT count(distinct datevalue(daReportDate))
 >>> FROM TReport
 >>> WHERE (hour(daReportDate) between 0 and 5) and
 >>> (year(daReportDate)=2007)
 >>
 >> Nu ligner det noget af det jeg søger. Mange tak :)
 >> Men jeg får fejle -
 >> "Der er en syntaks fejl fordi der mangler en operator i udtrykket
 >> count(distinct datevalue(daReportDate))"
 >
 > Det anede mig at Access muligvis ville have det lidt svært med den
 > konstruktion
 >
 > Prøv evt dette
 >
 > SELECT count(*)  as AntalDage FROM (
 >    SELECT distinct datevalue(daReportDate)
 >    FROM TReport
 >    WHERE (hour(daReportDate) between 0 and 5) and
 >    (year(daReportDate)=2007) )
 >
 > Jeg har testet ovenstående af i Access 2003 og det giver AntalDage = 3
 
 En god work-around, der burde give det samme som mit forslag.
 
 Beklager. Jeg blevet forvænt med at antage at Access accepterer de fleste 
 standard sql ting, og da distinct er så gammel som den ældste sql-definition 
 faldt det mig ikke ind, at det ikke skulle være dækket ind.
 
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
               Peter Lykkegaard (22-12-2007) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  22-12-07 20:02 |  
  |   
            "Kristian Damm Jensen" wrote
 
 > Beklager. Jeg blevet forvænt med at antage at Access accepterer de fleste 
 > standard sql ting, og da distinct er så gammel som den ældste 
 > sql-definition faldt det mig ikke ind, at det ikke skulle være dækket ind.
 >
 Distinct er understøttet bare ikke lige den konstruktion
 
 - Peter
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |