Я извлекаю количество IP-адресов, которые пытаются S SH на сервер в день, и записываю это во вторую таблицу. Поскольку эти записи будут сделаны в течение дня, и в течение дня может быть предпринято больше попыток, я только go до вчерашней даты, так как полное количество сегодняшних попыток будет доступно завтра.
Когда я выполнить код ниже, я получаю предупреждение «Ошибка в запросе (1292): усечено неверное значение DOUBLE:».
INSERT INTO secondary_table (
user_key,
hostname,
dateField,
ipAddress,
comment,
hitCount)
SELECT primary_table.user_key,
primary_table.hostname,
primary_table.dateField,
primary_table.ipAddress,
'Failed SSH login',
COUNT(primary_table.ipAddress)
FROM primary_table
LEFT JOIN secondary_table
ON secondary_table.user_key = primary_table.user_key
AND secondary_table.hostname = primary_table.hostname
AND secondary_table.dateField = primary_table.dateField
AND secondary_table.ipAddress = primary_table.ipAddress
AND secondary_table.comment = primary_table.comment
WHERE primary_table.comment = 'Failed SSH login'
AND primary_table.dateField < (SELECT MAX(dateField) FROM primary_table WHERE ipAddress > 1)
AND secondary_table.hostname IS NULL
GROUP BY user_key, hostname, dateField, ipAddress, primary_table.comment;
Первичные и вторичные таблицы:
-- primary_table
id int(11) Auto Increment
user_key varchar(255) NULL
dateField date NULL
hostname varchar(255) NULL
ipAddress varchar(255) NULL
comment varchar(255) NULL
-- secondary_table
id int(11) Auto Increment
user_key varchar(255) NULL
hostname varchar(255) NULL
dateField date NULL
ipAddress varchar(255) NULL
comment varchar(255) NULL
hitCount int(11) NULL
Когда я сам запускаю часть запроса SELECT, я получаю ожидаемые результаты.
Что Я ищу, чтобы вставить любые записи, которые еще не существуют во вторичной таблице, на основе полей user_key, hostname, date и ipaddress.
SELECT primary_table.user_key,
primary_table.hostname,
primary_table.dateField,
primary_table.ipAddress,
comment,
COUNT(primary_table.ipAddress)
FROM primary_table
WHERE primary_table.comment = 'Failed SSH login'
AND primary_table.dateField < (SELECT MAX(dateField) FROM primary_table WHERE ipAddress > 1)
GROUP BY user_key, hostname, dateField, ipAddress, primary_table.comment;
user_key | hostname | logDate | ipAddress | comment | COUNT(primary_table.ipAddress)
abcde1234567890| server01 | 23/02/2020 | 10.10.10.10 | Failed SSH login | 2480
abcde1234567890| server01 | 23/02/2020 | 10.10.10.11 | Failed SSH login | 2479