Cześć
Potrzebuję napisać zapytanie które będzie automatycznie liczyć ilość umów za miesiąc bieżący i poprzedni. Zapytanie musi być tak napisane, że samo będzie agregować miesiąc aktualny i poprzedni. Zapytanie w sql serwer. Z góry dziękuję za pomoc.
No to dam ci hinta (bo nawet struktury tabel nie podałeś): Funkcję agregujące jak np Count, grupowanie i funkcje okienkowe jak np ta: https://www.sqlservertutorial.net/sql-server-window-functions/sql-server-lead-function/ - takie rzeczy się mogą przydać, aczkolwiek nie koniecznie wszystkie.
Zakładając 3 kolumny
Co masz?
Czy ktoś próbował z funkcją getdate - interval?
Wystarczy warunek where i group by
select
month(data),
count(*)
from
tabela
where
data between select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) and getdate()
group by
month(data)
Dziękuję za odpowiedź, ale nie wchodzi zapytanie. Dostaje komunikat.
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'SELECT'.
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'AND'.
Kiedy usunę drugi select to wchodzi ale nie wiem czy to jest poprawne. Czy jest możliwość rozbicia tego na dwa osobne zapytania? W jednym będzie z tego miesiąca, a w drugim z poprzedniego miesiąca.
Ten select drugi jest nieprawidłowy. Tak jest mozliwość, wystarczy odpowiednio podać daty w between:
https://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next/
https://blog.sqlauthority.com/2018/09/20/sql-server-simple-method-to-find-first-and-last-day-of-current-date/
@Panczo: a czy mogę prosić Ciebie o pomoc w napisaniu tych dwóch zapytań? Pierwsze gdzie będzie liczyło ilość umów z miesiąca aktualnego, a drugie z miesiąca poprzedniego.
Pewnie bieżący miesięc to jest pierwszy dzień biezącego miesiąca i bieżąca data i to trzeba wstawić w between
, z poprzednim jest inaczej bo to jest pierwszy poprzedniego miesiąca i ostatni porzedniego miesiąca.
Jak klikniesz w linki które dałem wcześniej to znajdziesz
SELECT
TYPE
,count(*) as Google_Ads_Automated
FROM Tabela
where DateCreated between DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) AND GETDATE()
GROUP BY Type
Niestety nie wchodzi mi za poprzedni miesiąc
Konstrukcja between
jest prosta: podajsze zakres od kiedy do kiedy: between odkiedy and dokiedy
Czyli wg. zapytania pytasz o zakres od 2022-01-01 0000.000 do 2022-02-21 1559.970 no to nie bardzo pasuje do zakresu porzedniego miesiąca.
Tylko nie chodzi o wpisywanie dat na sztywno tylko żeby liczyło automatem
A gdzie tu masz wpisane na sztywno?
DateCreated between DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) AND GETDATE()