Zacząłem się bawić SQL-em i od razu na początku mnie przygniotło :(
mam takie zapytanie ( a tak przy okazji czy jest ono poprawne pod względem "optymalizacji" ? )
select DATEPART(wk, R_DATE), Count(R_ID) from Tabela1
WHERE R_DATE >= '130601'
AND R_DATE <= '130605'
AND T_MODE = '0'
AND R_CANC = '0'
AND USR_NO Like '2%'
AND R_ID IN (SELECT R_ID FROM Tabela2
WHERE R_DATE >= '130601'
AND R_DATE <= '130605'
AND RET_NO = '0'
AND ORDER_NO <> '0'
AND ART_NO <> '12345678')
GROUP by DATEPART(wk, R_DATE)
ORDER by DATEPART(wk, R_DATE)
mamy 2 bardzo podobne do siebie tabele z elementami wspólnymi z taką różnicą że jedna zawiera
"nagłówki danych" (1) a druga już jakieś konkretne szczegóły (2) - czyli można by rzec: klasyczny układ
Baza jest oparta na MS SQL 2008 ( wersja express )
i teraz mam dziwną sytuację :
np. próbujemy zmienić kryteria ( zmieniamy tylko i wyłącznie R_DATE w obydwu członach zapytania )
czyli to samo ale dla dat :od '130602' do '130605'
select DATEPART(wk, R_DATE), Count(R_ID) from RECEIPT
WHERE R_DATE >= '130602'
AND R_DATE <= '130605'
AND T_MODE = '0'
AND R_CANC = '0'
AND USR_NO Like '2%'
AND R_ID IN (SELECT R_ID FROM ARTICLE
WHERE R_DATE >= '130602'
AND R_DATE <= '130605'
AND RET_NO = '0'
AND ORDER_NO <> '0'
AND ART_NO <> '12345678')
GROUP by DATEPART(wk, R_DATE)
ORDER by DATEPART(wk, R_DATE)
wszystko pięknie działa.... idziemy dalej
R_DATE >= '130603'
R_DATE <= '130605'
wszystko pięknie działa....
ale już przy
R_DATE >= '130604'
R_DATE <= '130605'
SQL staje okoniem ... i nic nie chce zwrócić... choćby i czekać kilka minut
myślę sobie , może ten dzień '130604' jest jakiś trefny , może jakiś krzak w bazie jest
ale jak zapytam
R_DATE >= '130604'
R_DATE <= '130606'
no to juz mam wynik : ( oczywiście z uwzględnieniem tego dnia 130604 i 05 i 06 )
co ciekawe zakres
R_DATE >= '130604'
R_DATE <= '130604'
też nam zwraca wynik
kombinowałem jeszcze z wieloma wariantami
nawet odległymi w czasie kilku miesięcy
R_DATE >= '130101'
R_DATE <= '130604'
wszystko pięknie działa...
co może być przyczyną takiego zachowania , jak sprawdzić co blokuje mojego SQL, dlaczego nie może zwrócić wyniku
( może gdzieś jakieś sprytne logi gdzie to jest widać ... )
może jakiś niepoprawna konsystencja danych w bazie , ale jak to sprawdzić , jak wyszukać ... itd. ?
dziękuję za wszelkie podpowiedzi
Pozdrawiam
wporzak