Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql算术运算(减法)最后一天的第一天(周、月)_Mysql_Sql_Math_Subtraction - Fatal编程技术网

mysql算术运算(减法)最后一天的第一天(周、月)

mysql算术运算(减法)最后一天的第一天(周、月),mysql,sql,math,subtraction,Mysql,Sql,Math,Subtraction,我得到了一个MySQL tbl,带有一些列,每5分钟插入一行,其中包含3个值 1. Auto inc. curent Date Unix timestamp --> date 2. power consumption absolut --> wert01 3. Power Generation absolut --> wert02 为了在图表中显示此信息,例如每周功耗,我需要选择allready工作的第一个和最后一个,但必须从第一个中减去最后一个,并仅显示星期二结果&werk

我得到了一个MySQL tbl,带有一些列,每5分钟插入一行,其中包含3个值

1. Auto inc. curent Date Unix timestamp --> date
2. power consumption absolut --> wert01
3. Power Generation absolut --> wert02
为了在图表中显示此信息,例如每周功耗,我需要选择allready工作的第一个和最后一个,但必须从第一个中减去最后一个,并仅显示星期二结果&werk的日期

SELECT
  (SELECT wert01
   FROM sml_splitt
   WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
     AND date < curdate() - INTERVAL DAYOFWEEK(curdate()) DAY
   ORDER BY date DESC LIMIT 1) AS 'last',

  (SELECT wert01
   FROM sml_splitt
   WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
     AND date < curdate() - INTERVAL DAYOFWEEK(curdate()) DAY
   ORDER BY date LIMIT 1) AS 'lirst
我花了几天时间寻找解决办法,但没有成功。
希望您能帮助我。

如果您对您的查询感到满意,那么您可以通过再次嵌套它来进行计算,如下所示:

第二个视图将第一个视图与其自身连接起来,为您提供一周的开始和结束范围:

create view v2 as
select t1.week_begins, coalesce(t2.week_begins,now()) as week_ends
from v1 t1
left join v1 t2
on t2.week_begins = t1.week_begins + interval 7 day
您可以在此处看到结果:。请注意,如果一周尚未结束,我将使用now获取当前日期和时间

从那里,您可以将视图与原始表连接起来,并使用带有分组的“最小”和“最大”函数来获取起始值和结束值“wert”,并根据需要对其进行任何计算

下面是一个例子:


我希望这会有所帮助。

返回日期平均值的查询对您有用吗?不,不太有用。。。谢谢!非常感谢你。。。第一个和第二个解决方案对我有效@Saschachmitt,太好了。如果您对答案感到满意,请将其标记为已接受。
create view v1 as
select date(dt) as week_begins
from sml_splitt
where dayofweek(dt) = 1
group by week_begins
create view v2 as
select t1.week_begins, coalesce(t2.week_begins,now()) as week_ends
from v1 t1
left join v1 t2
on t2.week_begins = t1.week_begins + interval 7 day
select week_begins, week_ends,
min(wert01) as start_wert01,
max(wert01) as end_wert01,
max(wert01) - min(wert01) as power_consumed,
min(wert02) as start_wert02,
max(wert02) as end_wert02,
max(wert02) - min(wert02) as power_generated,
(max(wert02) - min(wert02)) - (max(wert01) - min(wert01)) as net_generated
from v2
inner join sml_splitt
on sml_splitt.dt >= v2.week_begins
and sml_splitt.dt < v2.week_ends
group by week_begins