У меня есть SQL-запрос, который объединяет историческую информацию о ценах. Это не особенно чисто и, вероятно, может быть оптимизировано очень много. Одна из причин этого заключается в том, что я использую подзапрос, чтобы захватить «предыдущее» значение цены через подзапрос и назначить его псевдониму «last_value». В идеале я хотел бы использовать этот псевдоним в предложении WHERE, вместо того, чтобы повторно выполнять поиск.Условная логика в псевдонимах SQL
Я понимаю, почему это невозможно (SQL-запросы анализируются справа налево, с использованием псевдонимов, применяемых до передачи данных обратно, насколько я понимаю). Я просто хотел опубликовать здесь, чтобы спросить, можно ли сделать что-то подобное, используя альтернативные способы.
В частности, мне бы очень хотелось рассчитать процентное различие между p.value (текущее значение) и last_value (последним значением) через SQL, а не делать это на уровне приложения.
Я рассматривал сохранение процентной разницы как отдельный столбец в самой таблице, но это кажется немного назад (учитывая, что задействованная логика тривиальна, и единственным камнем преткновения является использование псевдонима).
Я использую MySQL.
$sql = "SELECT
t.*,
p.value,
p.timestamp,
(SELECT
value
FROM
prices
WHERE
prices.id = p.id AND
prices.country=':country' AND
prices.timestamp < p.timestamp
ORDER BY
prices.timestamp DESC
LIMIT 1) AS last_value
FROM
prices AS p,
titles AS t
WHERE
t.row_id = p.id AND
p.country = ':country' AND
p.current = 1 AND
(SELECT
value
FROM
prices
WHERE
prices.id = p.id AND
prices.country=':country' AND
prices.timestamp < p.timestamp
ORDER BY
prices.timestamp DESC
LIMIT 1) IS NOT NULL
ORDER BY
p.timestamp DESC
LIMIT :offset, :limit";
Какая СУБД? Ответ для каждого будет совсем другим. – Aaronaught
Извините, должен был указать. MySQL. – ndg