Piszę zapytanie, w którym mam uzyskać dane tylko za ostatni rok. Jaki jest najlepszy sposób, aby to zrobić?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
źródło
źródło
Tę stronę znalazłem, szukając rozwiązania, które pomogłoby mi w doborze wyników z poprzedniego roku kalendarzowego. Większość wyników pokazanych powyżej wydaje się zwracać elementy z ostatnich 365 dni, które nie działały w moim przypadku.
Jednocześnie dało mi to wystarczający kierunek, aby rozwiązać moje potrzeby w poniższym kodzie - który zamieszczam tutaj dla wszystkich innych, którzy mają takie same potrzeby jak moje i którzy mogą natknąć się na tę stronę w poszukiwaniu rozwiązania.
Dziękuję tym, których rozwiązania pomogły mi osiągnąć to, czego potrzebowałem.
źródło
Cóż, myślę, że czegoś tu brakuje. Użytkownik chce uzyskać dane z ostatniego roku, a nie z ostatnich 365 dni. Różnica jest ogromna. Moim zdaniem dane z ostatniego roku to wszystkie dane z 2007 roku (jeśli jestem teraz w 2008 roku). Zatem prawidłowa odpowiedź brzmiałaby:
Następnie, jeśli chcesz ograniczyć to zapytanie, możesz dodać inny filtr, ale zawsze w ostatnim roku.
źródło
Wyszukaj dateadd w BOL
źródło
Najbardziej czytelny, IMO:
Który:
Istnieją warianty z DATEDIFF i DATEADD, które zapewniają dzisiejszą północ, ale są raczej tępe (choć nieco lepsze pod względem wydajności - nie żebyś zauważył w porównaniu do odczytów wymaganych do pobrania danych).
źródło
GETDATE () zwraca bieżącą datę i godzinę .
Jeśli ostatni rok zaczyna się o północy bieżącego dnia ubiegłego roku (jak w oryginalnym przykładzie), należy użyć czegoś takiego:
źródło
Inne sugestie są dobre, jeśli masz „tylko SQL”.
Sugeruję jednak, aby - jeśli to możliwe - obliczyć datę w swoim programie i wstawić ją jako ciąg w zapytaniu SQL.
Przynajmniej dla dużych tabel (np. Kilka milionów wierszy, być może w połączeniu z łączeniami), co da znaczną poprawę szybkości, ponieważ optymalizator może pracować z tym znacznie lepiej.
źródło
argument funkcji DATEADD:
data może być następująca: rr, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
liczba to wyrażenie, które można przetłumaczyć na liczbę całkowitą, która jest dodawana do części daty
date to wyrażenie, które można przetłumaczyć jako wartość czasu, daty, smalldatetime, datetime, datetime2 lub datetimeoffset.
źródło
źródło
Podobnie jak @DE White, przyjechałem tutaj z podobnych, ale innych powodów niż pierwotne pytanie. Oryginalne pytanie dotyczy ostatnich 365 dni. Zapewnia to odpowiedź @ samjudson. Odpowiedź @DE White zwraca wyniki za poprzedni rok kalendarzowy.
Moje zapytanie jest nieco inne, ponieważ działa w odniesieniu do poprzedniego roku do bieżącej daty włącznie:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Na przykład 17 lutego 2017 r. To zapytanie zwraca wyniki od 1 stycznia 2016 r. Do 17 lutego 2017 r
źródło
Miałem podobny problem, ale poprzedni programista podał datę tylko w formacie mm-rrrr. Moje rozwiązanie jest proste, ale niektórym może okazać się pomocne (chciałem też mieć pewność, że spacje początkowe i końcowe zostały wyeliminowane):
źródło
Z jakiegoś powodu żaden z powyższych wyników nie zadziałał dla mnie.
Wybiera ostatnie 365 dni.
źródło