Sqlalchemy: боковое соединение с фильтрами боковых столбцов - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть 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()?

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