mysql算术运算(减法)最后一天的第一天(周、月)
我得到了一个MySQL tbl,带有一些列,每5分钟插入一行,其中包含3个值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
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