2016-03-07 24 views
1

我正在嘗試計算每個帳戶的數據集中每條記錄之間的日期差異。如何在使用MySQL的變量中存儲最後一行的值?

這裏的數據,我有

id aid value 
1 1 2015-01-01 
2 1 2015-01-07 
4 1 2015-01-08 
6 1 2015-04-10 
3 2 2015-02-01 
5 2 2015-02-05 

我首先需要的地方,我可以用TIMESTAMPDIFF計算天數的不同組合數據(即TIMESTAMPDIFF(DAY, previousValue, currentValue))。

我怎樣才能在數據集中相結合的行約,看起來像這樣

aid currentValue previousValue 
1 2015-01-07 2015-01-01 
1 2015-01-08 2015-01-07 
1 2015-04-10 2015-01-08 
2 2015-02-05 2015-02-01 

從那裏我可以很容易地計算出當前和以前的值之間的天差。

請注意,我有一個大的數據集,我不能在我的選擇中使用子查詢,這就是爲什麼我需要知道如何使用變量來做到這一點。

我最初的數據集如何轉換爲第二個數據集在那裏我有CurrentValue的,PREVIOUSVALUE爲每個帳戶?

這裏是SQL生成上述

CREATE TEMPORARY TABLE lst 
(
    id int, 
    account_id int, 
    value date 
); 


INSERT INTO lst VALUES 
    (1, 1, '2015-01-01') 
, (2, 1, '2015-01-07') 
, (3, 2, '2015-02-01') 
, (4, 1, '2015-01-08') 
, (5, 2, '2015-02-05') 
, (6, 1, '2015-04-10'); 


CREATE TEMPORARY TABLE lst1 AS 
SELECT * FROM lst ORDER BY account_id, value ASC; 

更新了數據表

這是我嘗試下面

'1', '2015-01-01', '2015-01-07' 
'1', '2015-01-07', '2015-01-08' 
'1', '2015-02-05', '2015-04-10' 
'2', '2015-01-08', '2015-02-01' 
'2', '2015-02-01', '2015-02-05' 
+0

我認爲這是在預期結果的錯誤,因爲它是顯示* next *值而不是* previous *之一。 –

+0

你是對的。謝謝你的提示。我只是更新我的問題來糾正預期的數據 –

回答

2

SQL Fiddle

Giorgos Betsos的回答後,得到

的MySQL 5.6架構設置

CREATE TABLE test 
(
    id int, 
    account_id int, 
    value date 
); 


INSERT INTO test VALUES 
    (1, 1, '2015-01-01') 
, (2, 1, '2015-01-07') 
, (3, 2, '2015-02-01') 
, (4, 1, '2015-01-08') 
, (5, 2, '2015-02-05') 
, (6, 1, '2015-04-10'); 

查詢1

SELECT 
IF(@accId = account_id, @prevDate, '-') as "Previous Date", 
(@prevDate := value) as "Date", 
(@accId :=account_id) as account_id 
FROM 
test, (SELECT @accId := 0) a, (SELECT @prevDate := '-') b 
ORDER BY account_id ASC, value ASC 

Results

| Previous Date |  Date | account_id | 
    |---------------|------------|------------| 
    |    - | 2015-01-01 |   1 | 
    | 2015-01-01 | 2015-01-07 |   1 | 
    | 2015-01-07 | 2015-01-08 |   1 | 
    | 2015-01-08 | 2015-04-10 |   1 | 
    |    - | 2015-02-01 |   2 | 
    | 2015-02-01 | 2015-02-05 |   2 | 
+0

確實這樣做了!非常感謝你。 –

相關問題