mysql中两行的差异

时间:2012-09-26 06:57:16

标签: mysql

我需要两行的差异

SELECT ( b.l2framessent - a.l2framessent ), 
       CONVERT((Min(a.datetime) DIV 500)*500, datetime) 
       + INTERVAL 5 minute AS endOfInterval 
FROM   databasename.tablename a, 
       databasename.tablename b 
WHERE  a.ipaddress = 'moteid6' 
       AND b.ipaddress = 'moteid6' 
       AND a.datetime BETWEEN '2012-09-25 15:45:00' AND '2012-09-25 18:45:00' 
GROUP  BY a.datetime DIV 500;

这两行都来自同一个表,数据库和同一列

我得到负面和无关的价值

如何获得正确的值

select datetime, l2framessent 
from 6panview.Statistics3 
where ipaddress = 'moteid6' 
    AND datetime BETWEEN '2012-09-25 15:45:00' AND '2012-09-25 18:50:00';

+---------------------+--------------+
| datetime            | l2framessent |
+---------------------+--------------+
| 2012-09-25 17:45:56 |  25 |
| 2012-09-25 17:50:35 |  56 |
| 2012-09-25 17:55:15 |  87 |
| 2012-09-25 17:59:54 | 117 |
| 2012-09-25 18:04:33 | 148 |
| 2012-09-25 18:09:13 | 178 |
| 2012-09-25 18:13:52 | 208 |
| 2012-09-25 18:18:31 | 238 |
| 2012-09-25 18:23:10 | 269 |
| 2012-09-25 18:39:43 | 372 |
| 2012-09-25 18:44:23 | 402 |
| 2012-09-25 18:49:02 | 432 |
+---------------------+-----+

2 个答案:

答案 0 :(得分:0)

试试这个。不确定,但运气如果有效:

AND a.datetime BETWEEN TO_SECONDS('2012-09-25 15:45:00') AND TO_SECONDS('2012-09-25 18:45:00')

答案 1 :(得分:0)

这是一个有效的查询。你是第一个分开并乘以500的人,我没有意识到MySQL如何将日期时间转换为数字。

SELECT ( b.l2framessent - a.l2framessent ), 
       CONVERT(endOfInterval*500, DATETIME) endOfInterval
FROM   (SELECT datetime DIV 500 startOfInterval,
               l2framessent
        FROM tablename,
             (SELECT MIN(datetime) mindate
              FROM tablename
              WHERE ipaddress = 'moteid6'
                    AND datetime BETWEEN '2012-09-25 15:45:00' AND '2012-09-25 18:45:00'
              GROUP BY datetime DIV 500) b
        WHERE ipaddress = 'moteid6'
              AND datetime = mindate
       ) a, 
       (SELECT datetime DIV 500 endOfInterval,
               l2framessent
        FROM tablename,
             (SELECT MIN(datetime) mindate
              FROM tablename
              WHERE ipaddress = 'moteid6'
                    AND datetime BETWEEN '2012-09-25 15:45:00' AND '2012-09-25 18:45:00'
              GROUP BY datetime DIV 500) b
        WHERE ipaddress = 'moteid6'
              AND datetime = mindate
       ) b
WHERE endOfInterval = startOfInterval + 1

FIDDLE