select * from generic_shop
where (type, timestamp) in (
select type, max(timestamp)
from generic_shop
group by type
) order by type
Этот запрос работает, если тестируется в командной строке, но в комнате он утверждает, что есть ошибка в where (type, timestamp). Как мне переписать это, чтобы оно заработало? Заранее спасибо.
Кроме того, group by type не очень хорошо работает с select *. Вы также должны сообщить нам логику вашего запроса.
этот запрос в основном должен возвращать последнюю запись в базу данных для каждого типа на основе самой большой метки времени этого типа
Я действительно удивлен, что ваш запрос вообще выполнялся на SQLite. Если вы можете найти ссылку на документ, поддерживающий этот синтаксис, я бы хотел его увидеть. А пока я дал вам альтернативу, которую вы можете использовать для получения желаемого результата.
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;
SQLite не поддерживает предложения
WHERE INс несколькими столбцами. Пожалуйста, отметьте свой вопрос базой данных, которую вы фактически используете.