Подзапрос с несколькими столбцами room db

select * from generic_shop 
    where (type, timestamp) in (
        select  type, max(timestamp) 
            from generic_shop 
            group by type
    ) order by type

Этот запрос работает, если тестируется в командной строке, но в комнате он утверждает, что есть ошибка в where (type, timestamp). Как мне переписать это, чтобы оно заработало? Заранее спасибо.

SQLite не поддерживает предложения WHERE IN с несколькими столбцами. Пожалуйста, отметьте свой вопрос базой данных, которую вы фактически используете.

Tim Biegeleisen 17.07.2018 17:02

Кроме того, group by type не очень хорошо работает с select *. Вы также должны сообщить нам логику вашего запроса.

Tim Biegeleisen 17.07.2018 17:03

этот запрос в основном должен возвращать последнюю запись в базу данных для каждого типа на основе самой большой метки времени этого типа

nkoroi 17.07.2018 17:12

Я действительно удивлен, что ваш запрос вообще выполнялся на SQLite. Если вы можете найти ссылку на документ, поддерживающий этот синтаксис, я бы хотел его увидеть. А пока я дал вам альтернативу, которую вы можете использовать для получения желаемого результата.

Tim Biegeleisen 17.07.2018 17:15
0
4
711
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

SQLite не поддерживает предложения IN, содержащие более одного столбца с левой стороны. Но ваш запрос достаточно легко выразить другими способами:

SELECT g1.*
FROM generic_shop g1
INNER JOIN
(
    SELECT type, MAX(timestamp) AS max_timestamp
    FROM generic_shop
    GROUP BY type
) g2
    ON g1.type = g2.type AND g1.timestamp = g2.max_timestamp;
ORDER BY
    g1.type;

Другие вопросы по теме