webForumDet fria alternativet
Logga in / Bli medlem

Datum, numrera, gruppera

Databaser & SQL

7 svar · 399 visningar · startad av ptype

Medlem sedan juni 2002151 inlägg
Trådstart#1

Hej!

Jag har ett visst antal händelser i en tabell, alla med varsitt datum. Det skulle vara bra om man kunde få en numrering för datumet, typ så att första datumet som finns blir dag 1 och efterföljande dag blir dag 2 etc.

Ex:

2001-01-01 1
2001-01-03 3
2001-01-05 5

Sedan en ytterligare fråga, om ovanstående går att göra, går det sedan att t.ex. gruppera dem veckovis? alltså att dag 1-7 är vecka 1 osv??

Tacksam för svar!

Medlem sedan dec. 20003 887 inlägg
#2

Första frågan är den enkla, så jag väljer att svara på den ;)

SELECT [i]datumet[/i], Day([i]datumet[/i]) FROM [i]tabellen[/i]

Andra biten känns betydligt klurigare att lösa med SQL och jag kan inte komma på något där.

Medlem sedan dec. 200012 464 inlägg
#3

Det är nog inte riktigt så enkelt.

SELECT datumet, 
datediff(day,(select min(datumet) from t) ,datumet) + 1 as days
FROM t

2:an

select (datediff(day,(select min(datumet) from t) / 7) + 1,
count(*) from t
group by (datediff(day,(select min(datumet) from t) / 7) + 1
Medlem sedan juni 2002151 inlägg
#4

tack!! !!

Medlem sedan juni 2002151 inlägg
#5

En fortsatt fråga LarsG

Har nu

SELECT     intAntal, datDate, DATEDIFF(day,
                          (SELECT     MIN(datDate)
                            FROM          tblLagerTrans_ltr), datDate) + 1 AS days
FROM         dbo.tblLagerTrans_ltr
WHERE     (intId_art = '284')
ORDER BY days

Kan man utöka denna fråga så jag får summan av intAntal för en viss days? (kan alltså finnas flera poster för samma days)

Är dig evigt tacksam!!

Medlem sedan juni 2002151 inlägg
#6

yeah !!

SELECT     SUM(intAntal) AS Expr2, days AS Expr1
FROM         (SELECT     intAntal, datDate, DATEDIFF(day,
                                                  (SELECT     MIN(datDate)
                                                    FROM          tblLagerTrans_ltr), datDate) + 1 AS days
                       FROM          dbo.tblLagerTrans_ltr
                       WHERE      (intId_art = '284')) DERIVEDTBL
GROUP BY days
ORDER BY days
Medlem sedan dec. 20003 887 inlägg
#7

Följdfråga: nu begriper jag varken svaret på första eller andra frågan - varför väljs

DateDiff(day, SELECT Min(datumet) FROM t, [i]datumet[/i]) + 1

om det ska bli
2001-01-01 1
2001-01-03 3
2001-01-05 5

?

Var tanken att det skulle bli
2001-01-01 1
2001-01-03 2
2001-01-05 3

eller har jag frågan om bakhanden?

Medlem sedan juni 2002151 inlägg
#8

Det ska bli
2001-01-01 1
2001-01-03 3
2001-01-05 5

vilket det ju blir med SQL-syntaxen angiven, därför att man räknar ut skillnaden i dagar sedan den första dagen (2001-01-01) och postens datum.

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)