webForumDet fria alternativet

Datum, numrera, gruppera

7 svar · 397 visningar · startad av ptype

ptypeMedlem sedan juni 2002151 inlägg
#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!

Engine^Medlem sedan dec. 20002 861 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.

LarsGMedlem sedan dec. 200012 465 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
ptypeMedlem sedan juni 2002151 inlägg
#4

tack!! !!

ptypeMedlem 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!!

ptypeMedlem 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
Engine^Medlem sedan dec. 20002 861 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?

ptypeMedlem 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.

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)