使用SQL数据库查询以在一天的不同间隔中减去相同的列值

通过

在MySQL中,我想基于另一列“时间戳”在不同的时间间隔中减去列值之一。

table structure is : 
id | generator_id | timestamp             | generated_value
1  |  1           | 2019-05-27 06:55:20   | 123456     
2  |  1           | 2019-05-27 07:55:20   | 234566       
3  |  1           | 2019-05-27 08:55:20   | 333456       
..
..    
20  |  1           | 2019-05-27 19:55:20   | 9876908       

从上面的表中,我想获取generate_value列的值,该值应该是第一个时间戳记与当日的最后一个时间戳记之差。

在上面的示例中,我正在查找查询,该查询应该给我输出为9,753,452(9876908-123456)。

通常要获取一天的第一个值和最后一个值的单个记录,我在下面的查询中使用

// Below will give me end day value
SELECT * FROM generator_meters where generator_id=1 and timestamp like '2019-05-27%' order by timestamp desc limit 1 ;

//this will give me last day value 
SELECT * FROM generator_meters where generator_id=1 and timestamp like '2019-05-27%' order by timestamp  limit 1 ;

问题是如何从天的最后一个值减去天的第一个值来获得最终的generate_value。

Expected Output 
 generator_id | generated_value
  1           | 9753452     

提前致谢 !!

托斯滕·凯特纳

在您的示例中,价值变得越来越大。如果可以保证的话,您可以使用

select max(generated_value) - min(generated_value) as result
from sun_electric.generator_meters
where generator_id = 1
and date(timestamp) = date '2019-05-27';

或多个ID:

select generator_id, max(generated_value) - min(generated_value) as result
from sun_electric.generator_meters
and date(timestamp) = date '2019-05-27'
group by generator_id
order by generator_id;

如果该值未递增,则可以对ID 1使用以下查询:

select last_row.generated_value - first_row.generated_value as result
from 
(
  select * 
  from sun_electric.generator_meters
  where generator_id = 1
  and date(timestamp) = date '2019-05-27'
  order by timestamp
  limit 1
) first_row
cross join
(
  select * 
  from sun_electric.generator_meters
  where generator_id = 1
  and date(timestamp) = date '2019-05-27'
  order by timestamp desc
  limit 1
) last_row;

这是获取多个ID的结果的一种方法:

select
  minmax.generator_id,
  (
    select generated_value 
    from sun_electric.generator_meters gm
    where gm.generator_id = minmax.generator_id
    and gm.timestamp = minmax.max_ts
  ) -
  (
    select generated_value 
    from sun_electric.generator_meters gm
    where gm.generator_id = minmax.generator_id
    and gm.timestamp = minmax.min_ts
  ) as result
from
(
  select generator_id, min(timestamp) as min_ts, max(timestamp) as max_ts
  from sun_electric.generator_meters
  where date(timestamp) = date '2019-05-27'
  group by generator_id
) minmax
order by minmax.generator_id;

如果您更喜欢,也可以将子查询移至from子句并加入它们。还有另一种方法是使用MySQL 8中提供的窗口函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何安排将在每月的第一天执行并更新 Firebase 实时数据库中的值的任务

简化并加快每月的每一天查询数据库的过程

使用 PHP 对数据库列中的值列表执行完全匹配的 SQL 数据库查询

使用间隔来聚合前一天的值

ANSI SQL减去一天

如何从最后一天的数据库 scadalts 中获取值

从DateTime对象中减去一天

在 Jasper 中减去一天的日期

在 Jasper 中减去一天的日期

从C#中的数据库获取相同的列但取不同的值

如何从输入类型号和数据库(获取)值中减去一个值?减去后,在更新查询上更新当前余额

SQL:从我的SQL查询的日期值中减去1天

如何使用Spring JPA在同一事务中的不同数据库上维护多个sql查询

春季数据查询localdate返回错误的条目-减去一天

如何使用sql查询在同一列中减去两行的值?

如何使用 SQL 查询在同一列中减去两行的值?

根据按钮单击时频繁更改的日期从数据库中获取前一天的数据

具有相同表名的数据库跨数据库查询在Azure SQL中

SQL如何比较变量是否与数据库列中的值相同?

如何使用联合查询或联合查询地质数据库将不同列中的数据重新组合成一个

在数据库中存储工作日和一天中的时间表

在SQL Server中归档数据库表:是相同的数据库还是不同的数据库?

使用 DateTime 值过滤前一天的数据

使用一个SQL Server查询从不同服务器上的不同数据库获取数据

如何在 oracle 查询中更改一天的时间间隔?

toLocaleDateString()减去一天

从日期中减去一天,直到另一列中满足布尔条件

WITH RECURSIVE 循环遍历数据库中的每一天,并且每个日期之间的 SUM 数

SQL数据库查询:计数(不同)