我正在尝试从数据库中计算数据,但首先我从得到的结果中注意到了奇怪的行为,其次,我在提出考虑补充的请求时遇到了困难。
我有一张 table : 名称 - 日期时间 - 内容
我想按天对行进行分组,并选择数字的差异来进行消耗。 例如:
Name - DateTime - Content
Foo - 22-04-2018 6:00 - 120
Foo - 22-04-2018 10:00 - 119
Foo - 22-04-2018 16:00 - 118
内容减少了,结果应该是-2。 我的请求的输出 = -2
另一个例子:
Name - DateTime - Content
Foo - 23-04-2018 6:00 - 50
Foo - 23-04-2018 10:00 - 90
Foo - 23-04-2018 16:00 - 120
在这里我们可以注意到数量增加了。意思是我们不是消费了,而是补充了储备,内容增加了。 结果应该是-70。 我的请求的输出:30
我的要求:
SELECT day,
Abs(Sum(diffn)) AS totN
FROM (SELECT Date(datetime) AS day,
Max(content) - Min(content) AS diffN
FROM logs
WHERE NAME = 'Foo'
AND datetime >= '2018-04-22 00:00:00'
AND datetime <= '2018-04-23 00:00:00'
GROUP BY Date(datetime)) a
GROUP BY day;
但是对于第二个例子,我的结果是 30 而不是 70,我不知道为什么...... 我希望您帮助更改我的请求并考虑补充,以便我得到我想要的结果。
谢谢!
最佳答案
您需要通过比较最高值和最低值(包括时间(小时))来确定前缀。我在这里使用带有两个子查询的“CASE”函数。
也许您需要颠倒年月日,因为我使用的是德语日期时间格式。
SET @datetime = '2018-04-22';
SELECT date(datetime) as day
,(CASE WHEN
(SELECT content FROM logs WHERE date(datetime) = @datetime ORDER BY datetime LIMIT 1)
>
(SELECT content FROM logs WHERE date(datetime) = @datetime ORDER BY datetime desc LIMIT 1)
THEN min(content) - max(content)
ELSE max(content) - min(content) END) as diffN
FROM logs
WHERE Name = 'Foo' AND date(datetime) = @datetime
GROUP BY day(datetime)
ORDER BY datetime
;
关于mysql - SQL 查询 (MAX-MIN) 显示错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49977408/