Permalänk

Hjälp med T-SQL

Hallå

Sitter här och prövar hämta ut veckor med minst 3 veckodagar för angitt månad, f.eks. Februari så vill jag inte ha med vecka 5 før månaden startar på en fredag. Tror inte mer beskrivning behövs

Det jag har till hjälp i tabellen baserat på Februari är:

date (2013-02-01 - 2013-02-28)
day_of_month (1-28)
week (5-9)
month (2)
year(2013)
weekday(1-7)

Och här vill jag då ta ut week 6-9 men inte week 5.

Någon som är expert på SQL som kan hjälpa till?

Permalänk

Ok ingen som svarat ännu men har kommit en bit på vägen, kör nu dessa två SELECTs för att hämta ut min och max veckan för en månad där veckorna har minst 3 arbetsdagar.

SELECT MIN(vecka) FROM [Privat].dbo.kalender WHERE år = '2013' AND månad = @månad AND veckodag <= 3
SELECT MAX(vecka) FROM [Privat].dbo.kalender WHERE år = '2013' AND månad = @månad AND veckodag >= 3

Nu återstår bara att hämta ut veckorna mellan men det borde kanske inte vara något problem, någon som har input på detta? Finns bättre lösning?

Permalänk
Medlem

Jag förstår inte problembeskrivningen.

"hämta ut veckor med minst 3 veckodagar för angitt månad, f.eks. Februari så vill jag inte ha med vecka 5 før månaden startar på en fredag."

Hur jag resonerar:
Alla veckor har 7 veckodagar.
Februari har aldrig 5 veckor.

"Finns bättre lösning?"

Jag har svårt att se hur datat ligger i databasen och därför kan jag inte komma med en alternativ lösning.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Tror du har skrivit lite fel i din fråga, då du vill ha med veckor som består av "minst 3 dagar". vecka 5 har tre dagar, så den borde ju faktiskt vara med i beräkningen.

detta plockar fram de veckor i angiven månad som har mer än tre dagar.

SELECT [Week] FROM [Table] WHERE [Month] = @Month AND [Year] = @Year GROUP BY [Week] HAVING Count(*) > 3

följande fråga plockar alltså fram de datum som infaller under de veckor du eftersöker:

SELECT [T].[Date] FROM [Table] [T] INNER JOIN ( SELECT [Week] FROM [Table] WHERE [Month] = @Month AND [Year] = @Year GROUP BY [Week] HAVING COUNT(*) > 3 ) [WK] ON [WK].[Week] = [T].[Week] ORDER BY [Date]

EDIT:
"Rättade" frågorna efter Teknocides exempel. Jag hade ju glömt att man förmodligen är intresserad av att ange år också...
Frågorna utgår dessutom från att veckorna i tabellen börjar på måndag och inte söndag. (SET DATEFIRST 1)

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av python_ormen:

Hallå

Sitter här och prövar hämta ut veckor med minst 3 veckodagar för angitt månad, f.eks. Februari så vill jag inte ha med vecka 5 før månaden startar på en fredag. Tror inte mer beskrivning behövs

Det jag har till hjälp i tabellen baserat på Februari är:

date (2013-02-01 - 2013-02-28)
day_of_month (1-28)
week (5-9)
month (2)
year(2013)
weekday(1-7)

Och här vill jag då ta ut week 6-9 men inte week 5.

Någon som är expert på SQL som kan hjälpa till?

Är ingen hejare på T-SQL men i vanilj-SQL skulle det se ut något åt detta håller:

SELECT week FROM tabell WHERE month = 2 AND year = 2013 GROUP BY week HAVING (COUNT(weekday) >= 3)

Skrivet av jovnas:

Tror du har skrivit lite fel i din fråga, då du vill ha med veckor som består av "minst 3 dagar". vecka 5 har tre dagar, så den borde ju faktiskt vara med i beräkningen.

I MS-land börjar veckan med en söndag. Jättefånigt.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

I MS-land börjar veckan med en söndag. Jättefånigt.

Det är sant.
Av någon anledning utgick jag från att datan i tabellen genererats med DateFirst satt till 1, så att veckorna börjar med måndag.
Det var ju kanske en lite förhastad slutsats från min sida...

Visa signatur

as far as we can tell, the massacre went well...

Permalänk

Ja dessvärre var jag inte så bra på att förklara då
Menar så klart att hämta ut alla veckor i en månad som har 3 eller fler arbetsadagar (Måndag - Fredag), så alltså kolla så att månaden startar med en vecka som har 3+ och slutar med en vecka som har 3+ arbetsdagar

Men har löst det nu i alla fall, tusen tack för input