ech
- zrobili zakupy wcześniej niż x dni temu
SELECT
k.kh_Symbol
FROM
kh__Kontrahent k
LEFT JOIN dok__Dokument d
ON k.kh_Id = d.dok_OdbiorcaId
AND d.dok_Typ = 16 --WAŻNE musisz warunek dać w JOIN bo NAJPIERW musisz zawęzić listę dokumentów do tych sprzed x dni
AND d.dok_DataWyst < GETDATE()-20
GROUP BY
k.kh_Symbol
HAVING
Count(d.dok_DataWyst) > 2 --nie COUNT(*) tylko COUNT(cokolwiek z tabeli dokumentów) bo liczysz ilość dokumentów a nie czegokolwiek
- nie zrobili żadnych zakupów w ciągu ostatnich x dni
SELECT
k.kh_Symbol
FROM
kh__Kontrahent k
LEFT JOIN dok__Dokument d
ON k.kh_Id = d.dok_OdbiorcaId
AND d.dok_Typ = 16 --WAŻNE musisz warunek dać w JOIN bo NAJPIERW musisz zawęzić listę dokumentów do tych sprzed x dni
AND d.dok_DataWyst >= GETDATE()-20
GROUP BY
k.kh_Symbol
HAVING
Count(d.dok_DataWyst) = 0 --nie COUNT(*) tylko COUNT(cokolwiek z tabeli dokumentów) bo liczysz ilość dokumentów a nie czegokolwiek
alternatywnie można
SELECT
k.kh_Symbol
FROM
kh__Kontrahent k
LEFT JOIN dok__Dokument d
ON k.kh_Id = d.dok_OdbiorcaId
AND d.dok_Typ = 16 --WAŻNE musisz warunek dać w JOIN bo NAJPIERW musisz zawęzić listę dokumentów do tych sprzed x dni
AND d.dok_DataWyst >= GETDATE()-20
WHERE
d.dok_OdbiorcaId IS NULL --cokolwiek z tabeli dokumentów is null
- wynik
SELECT
a.kh_symbol
FROM
(SELECT
k.kh_Symbol
FROM
kh__Kontrahent k
LEFT JOIN dok__Dokument d
ON k.kh_Id = d.dok_OdbiorcaId
AND d.dok_Typ = 16
AND d.dok_DataWyst < GETDATE()-20
GROUP BY
k.kh_Symbol
HAVING
Count(d.dok_DataWyst) > 2) a
JOIN (
SELECT
k.kh_Symbol
FROM
kh__Kontrahent k
LEFT JOIN dok__Dokument d
ON k.kh_Id = d.dok_OdbiorcaId
AND d.dok_Typ = 16 --WAŻNE musisz warunek dać w JOIN bo NAJPIERW musisz zawęzić listę dokumentów do tych sprzed x dni
AND d.dok_DataWyst >= GETDATE()-20
WHERE
d.dok_OdbiorcaId IS NULL) b
ON a.kh_Symbol = b.kh_Symbol
Pewnie dało by się bez podzapytań ale nie chce mi się myśleć :p
Właśnie widzę, że całkowicie niepotrzebnie jest łączone z kontrahentami w pierwszym zapytaniu