SQL-запрос для соединения и подзапроса - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть 2 таблицы, как показано ниже

tbl_main

id | number
5  | 98236
6  | 85528
7  | 98236
8  | 98669

tbl_info

id  main_id did epochtime   firstname   lastname    operationstatus
1     6     204 1538384794  rajata      patile      1
2     5     204 1535185544  john        paulo       0
3     7     204 1536667819  jenny       patrick     0
4     6     204 1538384821  koma        mahaj       1   

tbl_info столбец main_id - это внешний ключ со столбцом идентификатора tbl_main.

Я хочу объединить обе таблицы таблиц по первым таблицам main_id.Если значение рабочего состояния равно 0, выберите значение времени нормальной эпохи.Если уровень операции равен 1 выборке записей с максимальным временем эпохи.

Я попробовал следующий запрос:

SELECT *
FROM `tbl_main` `m`
JOIN `tbl_info` `i` ON `i`.`main_id` = `m`.`id`
WHERE ((`i`.`operationstatus` = '0'AND `i`.`epochtime` > '0')OR (`i`.`operationstatus` = '1' AND `i`.epochtime = (SELECT MAX(epochtime) FROM tbl_info)))
AND `did` = '204'
GROUP BY `m`.`id`
ORDER BY `i`.`epochtime` DESC

Это дает 2 записи, мне нужно 3 уникальные записи, то есть основной идентификатор 5,6,7.Есть 2 записи с основным идентификатором 6, который имеет статус операции 1. Из этих 2 записей мне нужна одна запись с максимальным временем эпохи.

id  main_id did epochtime  firstname    lastname    operationstatus
3     7     204 1536667819 jenny        patrick       0
2     5     204 1535185544 john         paulo         0

1 Ответ

0 голосов
/ 05 декабря 2018

Ваш запрос производит 3 строки, как и ожидалось

DROP TAble if exists tbl_main,tbl_info;
create table tbl_main(id int, number int);
insert into tbl_main values
(5  , 98236),
(6  , 85528),
(7  , 98236),
(8  , 98669);

create table tbl_info(
id int, main_id int,did int,epochtime varchar(10),  firstname varchar(20),  lastname varchar(20),  operationstatus int);
insert into tbl_info values
(1  ,   6 ,    204, 1538384794 , 'rajata'   ,   'patile'   ,   1),
(2  ,   5 ,    204, 1535185544 , 'john'     ,   'paulo'    ,   0),
(3  ,   7 ,    204, 1536667819 , 'jenny'    ,   'patrick'  ,   0),
(4  ,   6 ,    204, 1538384821 , 'koma'     ,   'mahaj'    ,   1);

SELECT *
FROM `tbl_main` `m`
JOIN `tbl_info` `i` ON `i`.`main_id` = `m`.`id`
WHERE ((`i`.`operationstatus` = '0'AND `i`.`epochtime` > '0')OR (`i`.`operationstatus` = '1' AND `i`.epochtime = (SELECT MAX(epochtime) FROM tbl_info)))
AND `did` = '204'
GROUP BY `m`.`id`
ORDER BY `i`.`epochtime` DESC  ;

+------+--------+------+---------+------+------------+-----------+----------+-----------------+
| id   | number | id   | main_id | did  | epochtime  | firstname | lastname | operationstatus |
+------+--------+------+---------+------+------------+-----------+----------+-----------------+
|    6 |  85528 |    4 |       6 |  204 | 1538384821 | koma      | mahaj    |               1 |
|    7 |  98236 |    3 |       7 |  204 | 1536667819 | jenny     | patrick  |               0 |
|    5 |  98236 |    2 |       5 |  204 | 1535185544 | john      | paulo    |               0 |
+------+--------+------+---------+------+------------+-----------+----------+-----------------+
3 rows in set (0.00 sec)

А вот dbfiddle, который также производит 3 строки https://www.db -fiddle.com / f / 9N9A25zfpki8QqyRecduem / 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...