2014-02-27 26 views
0

我看了这里Calculate the time difference between of two rows两个非连续行之间的时间? (MySQL)

我在这里修改了代码:

SELECT A.Test_ID, B.TestDate - A.TestDate AS DaysBetweenTests FROM Exams A JOIN Exams B ON B.Test_ID = A.Test_ID WHERE (SELECT B.Test_ID FROM B.Exams ORDER BY Animal_ID, B.TestDate LIMIT 1 OFFSET 1)

这个查询是不完整的。我试图计算TestDate与下一个TestDate之间的天数,对于相同的Animal_ID。这里的问题在于,Test_ID与TestDate不是直接相连的Animal_ID。我不能使用Test_ID +1

样品考试表:

Test_ID | TestDate | Animal_ID 
1   2013-01-01 100 
2   2007-06-18 162 
3   2013-02-01 100 
4   2013-04-16 100 

TestDate单个Animal_ID总是为了增加,从而更高的Test_ID number

我遇到了子查询问题。

+0

考虑提供适当的DDL(和/或sqlfiddle)与期望的结果集合在一起。请注意,日期应该使用DATE数据类型进行存储。 – Strawberry

+0

它存储在DATE类型中。它采用yyyy-mm-dd格式,我只是以mm/dd/yy格式输入它们,以便于阅读。 – Hask15

+0

...如果您碰巧从附图中相对较小的部分发出冰雹...... http://en.wikipedia.org/wiki/Date_format_by_country – Strawberry

回答

1

该查询重复确定下一个测试日期的子查询。生产中不一定需要这样做;只是在您弄清楚事情时才能看到数据。

SELECT T1.Animal_ID, 
     T1.TestDate, 
     (SELECT min(TestDate) 
     FROM Exams 
     WHERE Animal_ID = T1.Animal_ID 
      AND TestDate > T1.TestDate 
     GROUP BY Animal_ID 
     ) AS Next_TestDate, 
     datediff((SELECT min(TestDate) 
        FROM Exams 
        WHERE Animal_ID = T1.Animal_ID 
        AND TestDate > T1.TestDate 
        GROUP BY Animal_ID 
       ), T1.TestDate) AS Elapsed_Days 
FROM Exams T1 
ORDER BY Animal_ID, TestDate; 
+0

太好了,谢谢!我目前正试图将其转换为MS Access SQL。 (看着datediff()函数,我想我只需要在第一个标准中输入“d”,然后插入datediff查询。) – Hask15

+0

在另一个文件中转换为MS Access SQL。 – Hask15

0
select 
t.*, 
coalesce(timestampdiff(day, @prevDate, if(@prevAnimal = Animal_ID, TestDate, @prevDate)), 0) as timedifference_in_days, 
@prevAnimal := Animal_ID, 
@prevDate := TestDate 
from 
t 
, (select @prevDate := null, @prevAnimal := null) as var_init 
order by Animal_ID, TestDate 

CREATE TABLE t 
    (`Test_ID` int, `TestDate` date, `Animal_ID` int) 
; 

INSERT INTO t 
    (`Test_ID`, `TestDate`, `Animal_ID`) 
VALUES 
    (1, '2013-01-01', 100), 
    (2, '2007-06-18', 162), 
    (3, '2013-02-01', 100), 
    (4, '2013-04-16', 100) 
; 

输出带电作业:

| TEST_ID |      TESTDATE | ANIMAL_ID | TIMEDIFFERENCE_IN_DAYS | @PREVANIMAL := ANIMAL_ID | @PREVDATE := TESTDATE | 
|---------|---------------------------------|-----------|------------------------|--------------------------|-----------------------| 
|  1 | January, 01 2013 00:00:00+0000 |  100 |      0 |      100 |   2013-01-01 | 
|  3 | February, 01 2013 00:00:00+0000 |  100 |      31 |      100 |   2013-02-01 | 
|  4 | April, 16 2013 00:00:00+0000 |  100 |      74 |      100 |   2013-04-16 | 
|  2 |  June, 18 2007 00:00:00+0000 |  162 |      0 |      162 |   2007-06-18 | 
相关问题