Насколько правильно составлен select и как через Join сделать?

207
26 ноября 2016, 20:12

Таблица и дамп:

CREATE TABLE IF NOT EXISTS `ftpuploadermon` (
  `date` datetime(3) DEFAULT NULL,
  `event` text,
  `region` text,
  `host` text,
  `type` text,
  `info` text,
  `status` text,
  `timestamp` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `ftpuploadermon` (`date`, `event`, `region`, `host`, `type`, `info`, `status`, `timestamp`) VALUES
('2016-10-14 17:01:26.974', 'WARN ', 'SZ', 'SIU02', '[main]', 'Started, locked port 6696', '0', '2016-10-14 16:19:39.241'),
('2016-10-14 16:58:23.946', 'WARN ', 'SZ', 'SIU02', '[main]', 'Stop signal !', '1', '2016-10-14 16:17:01.335'),
('2016-10-14 16:58:23.946', 'WARN ', 'POV', 'SIU02', '[main]', 'Stop signal !', '1', '2016-10-14 16:17:39.851');

Выбираю следующим select из нее:

SELECT a.date,a.region,a.host,a.type,a.info,a.status 
FROM ftpuploadermon a, 
( SELECT info,type,timestamp, max(date) as time FROM ftpuploadermon GROUP BY type ) b 
WHERE a.type = b.type AND a.date = b.time AND a.status <> '0' 
ORDER BY a.`date` DESC

Смысл select в том, чтобы выбрать максимальное по времени значение с группировкой по type. Но результат выборки не совсем тот, который нужен.

Т.е он выдает пустой результат выборки. А должен был выбрать максимальное значение по условию для которого status <> 0 Т.е должен быть результат :

('2016-10-14 16:58:23.946', 'WARN ', 'POV', 'SIU02', '[main]', 'Stop signal !', '1', '2016-10-14 16:17:39.851');

Вообще наверно лучше это все как-то через JOIN сделать , но я пока не соображу как.

Answer 1

c join

SELECT a.date,a.region,a.host,a.type,a.info,a.status 
FROM ftpuploadermon a
   inner join ( SELECT info,type,timestamp, max(date) as time 
                FROM ftpuploadermon 
                where a.status <> '0'
                GROUP BY  info,type,timestamp
              ) b  on a.type = b.type AND a.date = b.time
ORDER BY a.`date` DESC
Answer 2
SELECT a.date,a.region,a.host,a.type,a.info,a.status
FROM ftpuploadermon a, ( SELECT info,type, max(date) as time
                         FROM ftpuploadermon
                         WHERE status <> '0'
                         GROUP BY type ) b
WHERE a.type = b.type AND a.date = b.time
ORDER BY a.date DESC
READ ALSO
Выбрать все не NULL значения mysql

Выбрать все не NULL значения mysql

Есть таблица, где поля с атрибутами, у некоторых есть значение, у некоторых нет - NULL

296
Как лучше организовать базу данных для андроид приложения

Как лучше организовать базу данных для андроид приложения

Какую базу данных лучше использовать для GPS TrackerаХранить данные о местонахождении и обмениваться ими между зарегистрированными пользователями

303
Как сделать вывод с ограничением в OpenCart?

Как сделать вывод с ограничением в OpenCart?

Добрый день!Работаю с OpenCart, и не знаю как воплотить свою идеюУ нас есть 2 поля в админке, куда мы вводим слова:

233
Как добавить номер телефона в базу с &ldquo;+&rdquo; Laravel?

Как добавить номер телефона в базу с “+” Laravel?

Как добавлять номера в базу с "+" например +380991111111, при добавлении плюс исчезает куда топример

233