Gå til innhold

[Løst]Hjelp til en sql spørring


Anbefalte innlegg

Skrevet (endret)

Hei,

 

Jobber med eit program som holder telling på antal renders og unike besøk. Holder på å lagen en sql spørring som skal hente ut stattestikker fra kver måned mellom to tidspunkt. Kom from til følgende spørring:

 

SELECT SUM(hit_renders) as sumrenders, MIN(hit_renders) as minrenders, MAX(hit_renders) as maxreders, AVG(hit_renders) as avgrenders,SUM(hit_uhits) as sumuhits, MIN(hit_uhits) as minuhits, MAX(hit_uhits) as maxuhits, AVG(hit_uhits) as avguhits, hit_month as month, hit_year as year FROM sh_stats_data WHERE hit_month>=01 AND hit_year>=2005 AND hit_month<=03 AND hit_year<=2005 GROUP BY hit_year, hit_month

 

Og denne fungere top, men problemene kommer når eg vi ha infoen mellom 1 Januar 2005 og 1 Mars 2006:

 

SELECT SUM(hit_renders) as sumrenders, MIN(hit_renders) as minrenders, MAX(hit_renders) as maxreders, AVG(hit_renders) as avgrenders,SUM(hit_uhits) as sumuhits, MIN(hit_uhits) as minuhits, MAX(hit_uhits) as maxuhits, AVG(hit_uhits) as avguhits, hit_month as month, hit_year as year FROM sh_stats_data WHERE hit_month>=01 AND hit_year>=2005 AND hit_month<=03 AND hit_year<=2006 GROUP BY hit_year, hit_month

 

No returneren den dei tre første månene i 2005 og så dei tre første i 2006. Og når eg ser på spørringen så er dette ganske logisk. Men eg klarer ikkje å løse dette. Noen som har eit par tips ?

 

Takk,

Runar

 

Edit: Slik ser databasen ut:

CREATE TABLE `sh_stats_data` (
 `hit_day` int(11) NOT NULL,
 `hit_month` int(11) NOT NULL,
 `hit_week` int(11) NOT NULL,
 `hit_year` int(11) NOT NULL,
 `hit_renders` int(11) NOT NULL,
 `hit_uhits` int(11) NOT NULL
)

Endret av Shadows0
Videoannonse
Annonse
Skrevet

Hei

 

Regner med at du må slå sammen feltene. Ettersom det er int kan man ikke bruke pluss. Har dessverre ikke mulighet til å sjekke noen koder nå.

 

Kanskje dette går:

 

(hit_year & hit_month>='200501' ) and (hit_year & hit_month<='200603')

 

 

Hvis ikke det går må man gjøre feltene om til tekst verdier for så å legge dem sammen.

 

Håper du får det til.

 

Hilsen

Espen

Skrevet (endret)

hva med (hit_month>=01 and hit_month<=03 and hit_year=2006) or (hit_year=2005)

 

Edit: Hvorfor lagrer du ned måned og år i hver sine felter? Det enkleste ville ha vært å hatt et dato felt for når hit'et ble registrert, da kunne du tatt "where dato>='2005-01-01' and dato < '2006-04-01'

Endret av tZar
Skrevet
(hit_year  & hit_month>='200501' ) and (hit_year  & hit_month<='200603')

8070095[/snapback]

Takk skal prøve det no :)

 

 

Edit: Hvorfor lagrer du ned måned og år i hver sine felter? Det enkleste ville ha vært å hatt et dato felt for når hit'et ble registrert, da kunne du tatt "where dato>='2005-01-01' and dato < '2006-04-01'

8070131[/snapback]

Det lagrest i forskellige felter fordi eg trenger muligheten til å gruppere etter uke eller måneder.

Skrevet (endret)
Det lagrest i forskellige felter fordi eg trenger muligheten til å gruppere etter uke eller måneder.

8070288[/snapback]

 

Det kan du gjøre uten å måtte ha det i forskjellige felter, litt avhengig av databasemotor selvsagt.

 

Edit:

I MySQL feks, group by year(dato), month(dato)

 

Du kan vel sikkert gjøre tilsvarende med datepart i mssql hvis det er den du bruker

Endret av tZar
Skrevet

Bare sånn til informasjon: Denne problemstilligen kommer på grunn av dårlig valg av datatyper. Det er en grunn til at datatypen Date finnes.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...