durash
Goto Top

MYSQL Abfrage mit Benachrichtigung über KACE K1000

Hallo ich bin momentan am Testen von KACE K1000(Asset Management) und KACE K2000
Im Zusammenhang damit bräuchte ich mal etwas Unterstützung in Hinsicht von SQL.

Also Folgendes:
In KACE kann man Berichte erstellen und Planen die auf eine SQL Select Anweisung aufbauen.

Vorstellung vom Kunden: Benachrichtigung eines bald auslaufenden Vertrags.

Beispieltabelle:
Ablaufdatum
Vertrag + Ablaufdatum + Benachrichtigung am
Vertrag1 | 10.10.2015 | 10.09.2015
Vertrag2 | 20.09.2020 | 17.09.2020

etc.

So ich möchte eine Select Anweisung schreiben die alle Datensätze anzeigt die wo das Datum der Benachrichtigung am Heute und in der Vergangenheit liegt. Da ich von SQL nicht viel Ahnung habe, habe ich im Internet gestöbert und habe es versucht mit diesem Beispiel:

SELECT *
FROM Ablaufdatum
WHERE Benachrichtigung am <= DATE()

Nur funktioniert das nicht. Wäre ja auch zu einfach gewesen :D

Als Fehlermeldung bekommt ich bevor ich diese Berichterstellung speichern kann diese:
mysql error: [1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'am <= DATE() LIMIT 0' at line 3] in EXECUTE(
"SELECT *
FROM Ablaufdatum
WHERE Benachrichtigung am <= DATE() LIMIT 0")

Nur werde ich daraus nicht Schlau.
Habe mal in den Beispiel Benachrichtigung rumgestöbert die KACE dort schon drin hat dort sieht ein Beispiel SELECT Anweisung so aus. Dieser Befehl soll über einen Service Vertrag der in 60 Tagen ausläuft die Rechner Anzeigen.

SELECT M.NAME AS MACHINE_NAME, M.CS_MODEL AS MODEL, DA.SERVICE_TAG, DA.SHIP_DATE, M.USER_LOGGED AS LAST_LOGGED_IN_USER,
DW.SERVICE_LEVEL_CODE, DW.SERVICE_LEVEL_DESCRIPTION, DW.SERVICE_PROVIDER,
DW.END_DATE AS EXPIRATION_DATE
FROM DELL_WARRANTY DW
JOIN DELL_ASSET DA ON (DW.SERVICE_TAG = DA.SERVICE_TAG)
JOIN MACHINE M ON (M.BIOS_SERIAL_NUMBER = DA.SERVICE_TAG OR M.BIOS_SERIAL_NUMBER = DA.PARENT_SERVICE_TAG)
WHERE M.CS_MANUFACTURER LIKE '%dell%'
AND M.BIOS_SERIAL_NUMBER!=''
AND DA.DISABLED != 1
AND DW.END_DATE > NOW()
AND DW.END_DATE <= DATE_ADD(NOW(),INTERVAL 60 DAY)
AND DW.END_DATE = (SELECT MAX(END_DATE) FROM DELL_WARRANTY DW2 WHERE DW2.SERVICE_TAG=DW.SERVICE_TAG AND DW2.SERVICE_LEVEL_CODE=DW.SERVICE_LEVEL_CODE);

Wo liegt meine Fehler in der Formatierung? Oder habe ich komplett falschen Ansatz?

Vielen Danke schon mal im voraus für schnelle Antworten und alle Tipps & Tricks

Gruß Arne

Content-Key: 206483

Url: https://administrator.de/contentid/206483

Ausgedruckt am: 29.03.2024 um 15:03 Uhr

Mitglied: LianenSchwinger
LianenSchwinger 15.05.2013 um 12:33:01 Uhr
Goto Top
Hallo Arne,

setzt mal das Benachrichtigung am in Anführungsstriche.

SELECT * 
FROM Ablaufdatum 
WHERE "Benachrichtigung am" <= DATE()  

G Jörg
Mitglied: Durash
Durash 15.05.2013 um 12:45:25 Uhr
Goto Top
Hatte ich auch schon versucht.
Leider hilft das nicht.
Habe aber nun festgestellt das es wohl nicht einfach wird mit FROM Ablaufdatum
Man kann mit Hilfe des Asset Management wohl einen Bericht erstellen und dort wirft er einem schon etwas vor.

SELECT ASSET.NAME AS ASSET_NAME , AD.FIELD_35 as 'Benachrichtigung am', GROUP_CONCAT(DISTINCT L1.NAME) as 'Computer', AD.FIELD_34 as 'Ablaufdatum' FROM ASSET
LEFT JOIN USER U ON U.ID = ASSET.OWNER_ID
LEFT JOIN MACHINE M ON ASSET.MAPPED_ID = M.ID and ASSET.ASSET_TYPE_ID = 5
LEFT JOIN ASSET_DATA_10 AD ON AD.ID = ASSET.ASSET_DATA_ID LEFT JOIN ASSET_ASSOCIATION J1
ON J1.ASSET_FIELD_ID = 33 AND J1.ASSET_ID = ASSET.ID
LEFT JOIN ASSET L1
ON L1.ID = J1.ASSOCIATED_ASSET_ID
where ASSET.ASSET_TYPE_ID = 10 GROUP BY ASSET.ID ORDER BY ASSET_NAME

nur wie baue ich das nun um das er das Datum von Benachrichtigung am mit das Datum von heute Vergleich und mir dann die Datensätze auflistet.
Habs versucht den unterenteil where ASSET.ASSET_TYPE_ID = 10 GROUP BY ASSET.ID ORDER BY ASSET_NAME
durch where AD.FIELD_35 <= DATE() nur kommt dort wieder der Fehler selbe Fehler
Mitglied: LianenSchwinger
LianenSchwinger 15.05.2013 um 13:35:55 Uhr
Goto Top
Hallo Arne,

SELECT ASSET.NAME AS ASSET_NAME, 
       AD.FIELD_35 as 'Benachrichtigung am',   
       GROUP_CONCAT(DISTINCT L1.NAME) as 'Computer',   
       AD.FIELD_34 as 'Ablaufdatum'   
FROM ASSET
LEFT JOIN USER U ON U.ID = ASSET.OWNER_ID
LEFT JOIN MACHINE M ON ASSET.MAPPED_ID = M.ID 
                    AND ASSET.ASSET_TYPE_ID = 5
LEFT JOIN ASSET_DATA_10 AD ON AD.ID = ASSET.ASSET_DATA_ID 
LEFT JOIN ASSET_ASSOCIATION J1 ON J1.ASSET_FIELD_ID = 33 
                               AND J1.ASSET_ID = ASSET.ID
LEFT JOIN ASSET L1 ON L1.ID = J1.ASSOCIATED_ASSET_ID 
WHERE ASSET.ASSET_TYPE_ID = 10 
AND AD.FIELD_35 <= DATE()
GROUP BY ASSET.ID 
ORDER BY ASSET_NAME

G Jörg
Mitglied: Durash
Durash 15.05.2013 um 13:47:37 Uhr
Goto Top
Hallo Jörg das sieht gut aus, hab es direkt getestet. Nur kommt dort dieser Fehler wieder.. :/

mysql error: [1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
GROUP BY ASSET.ID
ORDER BY ASSET_NAME LIMIT 0' at line 14] in EXECUTE(
"SELECT ASSET.NAME AS ASSET_NAME,
AD.FIELD_35 as 'Benachrichtigung am',
GROUP_CONCAT(DISTINCT L1.NAME) as 'Computer',
AD.FIELD_34 as 'Ablaufdatum'
FROM ASSET
LEFT JOIN USER U ON U.ID = ASSET.OWNER_ID
LEFT JOIN MACHINE M ON ASSET.MAPPED_ID = M.ID
AND ASSET.ASSET_TYPE_ID = 5
LEFT JOIN ASSET_DATA_10 AD ON AD.ID = ASSET.ASSET_DATA_ID
LEFT JOIN ASSET_ASSOCIATION J1 ON J1.ASSET_FIELD_ID = 33
AND J1.ASSET_ID = ASSET.ID
LEFT JOIN ASSET L1 ON L1.ID = J1.ASSOCIATED_ASSET_ID
WHERE ASSET.ASSET_TYPE_ID = 10
AND AD.FIELD_35 <= DATE()
GROUP BY ASSET.ID
Mitglied: Durash
Durash 15.05.2013 um 13:50:46 Uhr
Goto Top
Ok Habe wohl den Fehler gefunden, es liegt an dem DATE() es heißt dort wohl NOW() jedenfalls lies er sich mit NOW() abspeichern ohne Fehlermeldung, werde das ganze nun test und melde mich dann zurück. ;) Danke dir Jörg
Mitglied: Durash
Durash 15.05.2013 um 14:25:08 Uhr
Goto Top
Ok vielen Dank, klappte alles super.