从查询中获取最接近的日期

时间:2015-11-24 17:11:36

标签: mysql datetime

我有这个问题:

   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:002015-11-24 19:00:00更新,则prev.timestamp将从12.30更新中检索其数据,并从19.00更新curr.timestamp。 (注意CURDATE())。

因此,如果只有一次更新,我将得到的最小值是NULL值。

1 个答案:

答案 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
相关问题