我有这个问题:
SELECT curr.slug,
format((curr.senaste*100 / NULLIF(prev.senaste, 0)-100),1) as percentage
FROM aktier AS curr
INNER JOIN aktier AS prev
ON curr.slug = prev.slug
WHERE date(prev.timestamp) = DATE(:from_date)
AND date(curr.timestamp) = DATE_ADD(CURDATE(), INTERVAL -1 DAY)
AND curr.slug = :slug
此查询计算表aktier
中两个日期之间值的百分比变化。
但事实是,表aktier
每天更新两次。我现在添加了一个INTERVAL -1 DAY
所以我知道我会得到一个值,而不需要等待24小时才能得到一个值。是否可以添加prev.timestamp
获取“最低日期” - 和时间,以及and
curr.timestamp
条款获得“最高”。
因此,如果表格在2015-11-24 12:30:00
和2015-11-24 19:00:00
更新,则prev.timestamp将从12.30更新中检索其数据,并从19.00更新curr.timestamp。 (注意CURDATE()
)。
因此,如果只有一次更新,我将得到的最小值是NULL值。
答案 0 :(得分:0)
粗制方式是进行一对子查询以获取行,一个限制为1以获取最新值,另一个LIMIT 2,1获得第二个最新行。
如下所示,假设curr只有1条记录,而prev为1条记录
SELECT curr.slug,
format((curr.senaste*100 / NULLIF(prev.senaste, 0)-100),1) as percentage
FROM
(
SELECT *
FROM aktier
ORDER BY timestamp DESC
LIMIT 1
) AS curr
INNER JOIN
(
SELECT *
FROM aktier
ORDER BY timestamp DESC
LIMIT 2, 1
) AS prev
ON curr.slug = prev.slug
WHERE curr.slug = :slug