[DB2] Zmiana zapytania - odejmowanie dat

0

Witajcie
Poniżej wklejam zapytanie z którm mam problem. Mianowicie potrzebuje wyciagnąć takie id z serwerów, których różnica pomiędzy datami jest nie większa niż 1 dzień.
W tabeli daty zdefiniowane są jako VARCHAR i oprócz daty zawierają godzinę i po kropce sekundy. O ile wykorzystując funkcję LEFT mogę wyciagnąć 10 znaków pierwszych i wyświetlić date w formacie : RRRR-MM-DD to gdy chce odjąć te wartości to juz nie działa. Przypuszczam, że może źle podchodze do rozszerzenie ale przynam się, że jestem początkującym użytkownikiem więc proszę o radę. Potrzebuje rekordów, którcych logdate nie różni się od lastscanned nie więcej niż jeden dzień.

SELECT URT_INFO_BESCM01_ARCH_SERVER_V3.CUSTOMER,URT_INFO_BESCM01_ARCH_USER_V3.SERVERNAME, 
URT_INFO_BESCM01_ARCH_USER_V3.USERID,LEFT(URT_INFO_BESCM01_ARCH_USER_V3.LOGDATE,10) AS LOGDATE_1 , LEFT(URT_INFO_BESCM01_ARCH_SERVER_V3.LASTSCANNED,10) AS LASTSCANNED_1 

FROM UIDT.URT_INFO_BESCM01_ARCH_SERVER_V3 AS URT_INFO_BESCM01_ARCH_SERVER_V3, UIDT.URT_INFO_BESCM01_ARCH_USER_V3 AS URT_INFO_BESCM01_ARCH_USER_V3

WHERE URT_INFO_BESCM01_ARCH_USER_V3.USERTYPE IN ('E', 'I') AND URT_INFO_BESCM01_ARCH_USER_V3.SERVERNAME=URT_INFO_BESCM01_ARCH_SERVER_V3.SERVERNAME 
AND URT_INFO_BESCM01_ARCH_SERVER_V3.LASTSCANNED = ( select max(URT_INFO_BESCM01_ARCH_SERVER_V3.LASTSCANNED)
from UIDT.URT_INFO_BESCM01_ARCH_SERVER_V3 AS URT_INFO_BESCM01_ARCH_SERVER_V3) and LASTSCANNED_1 - LOGDATE_1 <=1

z góry wielkie za pomoc

0

Dzięki wielkie ale czy jesteś w stanie pomóc mi zmodyfikować to zapytanie? Bo u mnie krucho z ang?

0

A czy możesz mi powiedzieć co jest nie tak z wybieraniem tej maksymalnej daty?

SELECT URT_INFO_BESCM01_ARCH_SERVER_V3.CUSTOMER,URT_INFO_BESCM01_ARCH_USER_V3.SERVERNAME, URT_INFO_BESCM01_ARCH_SERVER_V3.OS, 
URT_INFO_BESCM01_ARCH_USER_V3.USERID, URT_INFO_BESCM01_ARCH_USER_V3.STATUS, 
Max(Date(URT_INFO_BESCM01_ARCH_USER_V3.LOGDATE))as LOGDATE_1,URT_INFO_BESCM01_ARCH_USER_V3.GROUPT, URT_INFO_BESCM01_ARCH_USER_V3.PRIVST, 
URT_INFO_BESCM01_ARCH_USER_V3.USERTYPE, URT_INFO_BESCM01_ARCH_USER_V3.USERNAME, URT_INFO_BESCM01_ARCH_USER_V3.PDBNR, URT_INFO_BESCM01_ARCH_USER_V3.COUNTRYCODE, Max(Date(URT_INFO_BESCM01_ARCH_SERVER_V3.LASTSCANNED))as LASTSCANNED_1
FROM UIDT.URT_INFO_BESCM01_ARCH_SERVER_V3 AS URT_INFO_BESCM01_ARCH_SERVER_V3, UIDT.URT_INFO_BESCM01_ARCH_USER_V3 AS URT_INFO_BESCM01_ARCH_USER_V3
WHERE URT_INFO_BESCM01_ARCH_USER_V3.USERTYPE IN ('E', 'I') AND URT_INFO_BESCM01_ARCH_USER_V3.SERVERNAME=URT_INFO_BESCM01_ARCH_SERVER_V3.SERVERNAME 
AND (Date(URT_INFO_BESCM01_ARCH_SERVER_V3.LASTSCANNED) - Date(URT_INFO_BESCM01_ARCH_USER_V3.LOGDATE))<=1

Dlaczego status myli z jakąs funkcją? Dostaje taki komunikat "An expression starting with "STATUS" specified in a SELECT clause, HAVING clause, or ORDER BY clause is not specified in the GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER BY clause with a column function and no GROUP BY clause is specified.. SQLCODE=-119, SQLSTATE=42803, DRIVER=3.64.106"

0

Podpowiedź:

select datediff(cast("2014-12-11" as datetime), cast("2014-12-10" as datetime)) as roznicadni; 
0

możesz podać więcej szeczgołów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1