У меня есть postgres таблица с тремя столбцами, имя , stat , значение и отметка времени , где имя может быть одинаковым во многих строках, а другие столбцы могут различаться следующим образом:
| имя | стат | значение | отметка времени |
| ------------ | -------- | -------- | ------------- ---- |
| A | stat1 | 2 | 02-01-2020 |
| A | stat1 | 1 | 01-13-2020 |
| A | stat2 | 1 | 02-02-2020 |
Я выполняю запрос, в котором мне нужно получить самую последнюю запись (используя столбец timestamp ) для каждой строки с определенной stat значение столбца, а затем сравнить и применить фильтры к значению этих боковых столбцов, например:
В этом запросе используются самые последние значения (с использованием метки времени) для строки, чей столбец stat имеет значение «stat1» или «stat'2», а затем проверяет, что их добавленные значения превышают 2
SELECT DISTINCT a.name
FROM MyTable a
LEFT JOIN LATERAL (SELECT value FROM MyTable WHERE name = m.name AND stat = 'stat1' AND value notnull ORDER BY timestamp DESC LIMIT 1) "stat1"
ON TRUE
LEFT JOIN LATERAL (SELECT value FROM MyTable WHERE name = m.name AND stat = 'stat2' AND value notnull ORDER BY timestamp DESC LIMIT 1) "stat2"
ON TRUE
WHERE
m.name = 'A' AND
"stat1".value + "stat2".value > 2;
Как мне сделать sh это то же самое запрос в sqlalchemy, не с использованием session.query()
, но с использованием select().where()
?