在mysql中模拟Oracle的lag()

时间:2015-01-09 17:12:38

标签: mysql lag

我有一个简单的表格,其中包含交货日期和数量。我正在尝试编写一个将返回当前交货日期,上一个日期和数量的查询。我需要我的where子句可以访问的交付日期和之前的日期。

当我使用mysql或phpMyAdmin运行我的语句时,所有结果的前一个日期都为NULL。我无法弄清楚我做错了什么。

我的表:

CREATE TABLE delivery
(`delivery_date` int(11), quantity float);

INSERT INTO delivery
(`delivery_date`, `quantity`)
VALUES
    (1399953600, 84),
    (1414382400, 109.4),
    (1418187600, 124.5);

我的查询:

SELECT s.quantity AS quantity, s.start_date AS start_date, s.delivery_date AS delivery_date
FROM (SELECT quantity, @start AS start_date, @start := delivery_date AS delivery_date,
            (SELECT @start := NULL) AS vars
      FROM delivery d
      ORDER BY start_date ASC) s

我已经在SQL Fiddle上设置了我正在使用的查询。

1 个答案:

答案 0 :(得分:2)

我认为您可以通过将变量初始化放在from子句中来简化查询:

select quantity
     , @start as start_date
     , @start := d.delivery_date as delivery_date
from (select @start := null) as vars, 
     delivery as d
order by d.delivery_date;

我认为问题是@start变量初始化为每个获取行的null。通过将变量定义移动到FROM子句,它将只初始化一次。

检查更新的SQL fiddle并尝试自己。

希望这有帮助