У меня есть довольно простая таблица с именем assignment
;
CREATE TABLE IF NOT EXISTS assignment (h_id bigint, country string, p_name string)
Существует одна строка на h_id
:
INSERT INTO TABLE assignment
VALUES (19874, "France", "Example_Name"),
(21548, "France", "Example_Name"),
(34569, "Germany", "Different_Name"),
(47337, "Greece", "Another Name"),
(54682, "Greece", "Example Name")
(64963, "France", "Different Name");
Я хочу присоединиться assignment
квторая таблица, state
:
CREATE TABLE IF NOT EXISTS state (id bigint, xml_id bigint, datetime_in string, datetime_out string)
xml_id
- это ключ объединения с h_id
, и в состоянии h_id
имеется несколько строк.
INSERT INTO TABLE state
VALUES (1, 19874, "2014-04-03 10:38:31.0", "2017-11-30 10:45:00.0"),
(2, 19874, "2014-02-05 10:21:33.0", "2019-02-02 10:30:35.0"),
(3, 19874, "2019-02-26 14:34:17.0", null),
(4, 54682, "2019-03-07 14:43:34.0", null),
(5, 54682, "2019-02-25 10:47:09.0", null)
(6, 64963, "2019-02-06 12:50:05.0", "2019-05-04 16:15:08.0");
Мой желаемыйвыводит данные из assignment
с самой последней datetime_in
из state
.
Вот что я пробовал:
SELECT xml_id, datetime_in
FROM (SELECT *,
dense_rank() over (partition by xml_id ORDER BY datetime_in DESC) as rank
FROM state s
WHERE s.xml_id IN (SELECT a.h_id FROM assignment a)
) temp
WHERE rank = 1
Проблема в том, что я получаю только ~2k строк назад, несмотря на то, что в присваивании было ~ 7k строк.
Если я сделаю:
SELECT COUNT(*) FROM state s
WHERE s.xml_id IN (SELECT a.h_id FROM assignment a)
, я получу ~ 8k результатов.Я ожидаю, что, поскольку в state
на a.h_id
есть несколько строк.Однако я не могу понять, почему я получаю ~ 2 тыс. Строк только при попытке получить самую последнюю datetime_in
с данными из assignment
.