Mam zapytanie, które zlicza daty ślubu członka w bazie danych.
SELECT
SUM(NumberOfBrides) AS [Wedding Count]
, DATEPART( wk, WeddingDate) AS [Week Number]
, DATEPART( year, WeddingDate) AS [Year]
FROM MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC
Jak obliczyć, kiedy początek i koniec każdego tygodnia są przedstawione w zestawie wyników?
SELECT
SUM(NumberOfBrides) AS [Wedding Count]
, DATEPART(wk, WeddingDate) AS [Week Number]
, DATEPART(year, WeddingDate) AS [Year]
, ??? AS WeekStart
, ??? AS WeekEnd
FROM MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC
sql
sql-server
date
sql-server-2005
week-number
digiguru
źródło
źródło
DATEFIRST
cokolwiek innego niż 7 przerywa to.Oto
DATEFIRST
rozwiązanie agnostyczne:źródło
możesz również użyć tego:
źródło
Poszerzenie odpowiedzi @ Tomalak . Formuła działa dla dni innych niż niedziela i poniedziałek, ale musisz użyć innych wartości dla miejsca, w którym znajduje się 5. Sposobem na osiągnięcie wartości, której potrzebujesz, jest
tutaj jest link do dokumentu: https://msdn.microsoft.com/en-us/library/ms181598.aspx
A oto stół, który to przedstawia.
Ale nie musisz pamiętać tej tabeli i tylko wzoru, a właściwie możesz użyć nieco innej tabeli, główną potrzebą jest użycie wartości, która sprawi, że pozostała część będzie prawidłową liczbą dni.
Oto działający przykład:
Ta metoda byłaby niezależna od
DATEFIRST
ustawienia, którego potrzebowałem, ponieważ buduję wymiar daty z uwzględnieniem metod wielotygodniowych.źródło
Oto inna wersja. Jeśli Twój Scenariusz wymaga, aby sobota była pierwszym dniem tygodnia, a piątek ostatnim dniem tygodnia, poniższy kod zajmie się tym:
źródło
Poniższe zapytanie poda dane od początku do końca bieżącego tygodnia od niedzieli do soboty
źródło
Podzielmy problem na dwie części:
1) Określ dzień tygodnia
W
DATEPART(dw, ...)
Zwraca liczbę, 1 ... 7, w stosunku doDATEFIRST
ustawienia ( dokumenty ). W poniższej tabeli podsumowano możliwe wartości:Ostatnia kolumna zawiera idealną wartość dnia tygodnia dla tygodni od poniedziałku do niedzieli *. Po prostu patrząc na wykres, otrzymujemy następujące równanie:
2) Oblicz poniedziałek i niedzielę dla podanej daty
Jest to trywialne dzięki wartości dnia tygodnia. Oto przykład:
Wynik:
* W tygodniach od niedzieli do soboty wystarczy trochę skorygować równanie, np. Dodać gdzieś 1.
źródło
Jeśli niedziela jest traktowana jako dzień rozpoczęcia tygodnia, oto kod
źródło
Po prostu napotykam podobny przypadek z tym, ale tutaj rozwiązanie wydaje mi się nie pomagać. Więc próbuję to rozgryźć sam. Wyliczam tylko datę rozpoczęcia tygodnia, data zakończenia tygodnia powinna mieć podobną logikę.
źródło
Najczęściej głosowana odpowiedź działa dobrze, z wyjątkiem pierwszego tygodnia i ostatniego tygodnia roku. Na przykład, jeżeli wartość WeddingDate jest „01.01.2016”, wynik będzie 27/12/2015 i 02/01/2016 , ale prawidłowa odpowiedź jest 01.01.2016 i 2.01.2016 .
Spróbuj tego:
Wynik wygląda następująco:
Działa przez wszystkie tygodnie, pierwszy lub inny.
źródło
Tydzień data rozpoczęcia i zakończenia od daty dla formuły usługi Power BI Dax
źródło
To jest moje rozwiązanie
źródło
Uzyskaj datę rozpoczęcia i datę zakończenia według daty niestandardowej
źródło
Mam inny sposób, to wybierz dzień Początek i dzień Koniec tygodnia Aktualny:
źródło
Inny sposób na zrobienie tego:
Wyjaśnienie:
select datediff(week, 0, @wedding_date) as week_number
dateadd(week, @week_number, @end_weekday)
: dodaje podaną liczbę tygodni i podaną liczbę dni do początkowej daty kalendarza „ 1900-01-01 ”źródło
To nie pochodzi ode mnie, ale wykonało swoją pracę niezależnie:
Znalazłem to tutaj .
źródło
Nie jestem pewien, jak przydatne jest to, ale skończyłem tutaj, szukając rozwiązania na Netezza SQL i nie mogłem go znaleźć przy przepełnieniu stosu.
W przypadku IBM netezza użyłbyś czegoś (na początek tygodnia w poniedziałek, koniec tygodnia) na przykład:
wybierz next_day (WeddingDate, 'SUN') -6 jako WeekStart,
next_day (WeddingDate, 'SUN') jako WeekEnd
źródło
w przypadku zapytań dostępu można użyć jako pola w poniższym formacie
dozwolone bezpośrednie obliczenia.
źródło