这是我的sqlite表:
CREATE TABLE TEST
(ID INTEGER PRIMARY KEY NOT NULL,
DAY DATE NOT NULL,
HOUR TIME NOT NULL,
VALUE REAL NOT NULL,
COEF REAL)
我的价值观:
║ DAY ║ HOUR ║ VALUE ║ COEF ║
║ '2016-01-19' ║ '16:00' ║ '11240.0' ║ '0.5'║
║ '2016-01-19' ║ '18:00' ║ '11244.0' ║ '0.2'║
║ '2016-01-22' ║ '20:30' ║ '11254.0' ║ '0.6'║
║ '2016-01-23' ║ '12:25' ║ '11256.0' ║ '0.8'║
║ '2016-01-23' ║ '14:40' ║ '11257.0' ║ '0.3'║
║ '2016-01-24' ║ '09:40' ║ '11259.0' ║ '0.4'║
║ '2016-01-24' ║ '19:45' ║ '11260.0' ║ '0.5'║
║ '2016-01-25' ║ '18:50' ║ '11263.0' ║ '0.6'║
║ '2016-01-26' ║ '18:40' ║ '11266.0' ║ '0.1'║
║ '2016-01-31' ║ '20:00' ║ '11278.0' ║ '0.9'║
║ '2016-01-31' ║ '22:00' ║ '11280.0' ║ '0.3'║
║ '2016-02-03' ║ '21:40' ║ '11285.0' ║ '0.4'║
║ '2016-02-05' ║ '10:10' ║ '11290.0' ║ '0.2'║
我想根据'Max(DAY)'的最新'HOUR'为每个'WeekNumber'选择'Max(DAY)'值。
到目前为止,我有这个要求:
SELECT strftime('%Y-%m-%d', DAY, 'weekday 0') WeekNumber, MAX(DAY), HOUR,
MAX(VALUE), MAX(VALUE)-MIN(VALUE), COEF
FROM TEST
WHERE DAY >= '2016-01-19' AND DAY <= '2017-03-31'
GROUP BY WeekNumber
ORDER BY WeekNumber ASC
该查询获得该结果:
║ "2016-01-24" ║ "2016-01-24" ║ "16:00" ║ "11260.0" ║ "20.0" ║ "0.5" ║
║ "2016-01-31" ║ "2016-01-31" ║ "18:50" ║ "11280.0" ║ "17.0" ║ "0.6" ║
║ "2016-02-07" ║ "2016-02-05" ║ "21:40" ║ "11290.0" ║ "5.0" ║ "0.4" ║
在这个结果中,在线'2016-01-24'''HOUR'栏的价值为'16:00',但我需要获得'19:45'......我需要获得最新的一小时上周这一天。
(结果行'2016-01-31'同样的事情,应该是'HOUR = 22:00')
我如何继续处理这项工作的请求?
(我不能在请求中使用'Max(HOUR)',因为它会产生本周最高的小时数,但不会出现我想要的一周最后一天的那一小时)
感谢您的任何想法
答案 0 :(得分:0)
当然,这里是'插入':
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-19','16:00','11240.0','0.5');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-19','18:00','11244.0','0.2');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-22','20:30','11254.0','0.6');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-23','12:25','11256.0','0.8');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-23','14:40','11257.0','0.3');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-24','09:40','11259.0','0.4');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-24','19:45','11260.0','0.5');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-25','18:50','11263.0','0.6');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-26','18:40','11266.0','0.1');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-31','20:00','11278.0','0.9');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-01-31','22:00','11280.0','0.3');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-02-03','21:40','11285.0','0.4');
插入测试(ID,DAY,HOUR,VALUE,COEF)值(NULL,'2016-02-05','10:10','11290.0','0.2');
答案 1 :(得分:0)
一种解决方案是每天制作一个名为MAXH的辅助表,最大小时数。 仅在查询期间存在的临时表是使用WITH创建的,如下所示:
with
maxh as (select day, max(hour) max_hour from test group by day),
result as (
select
strftime('%Y-%m-%d', day, 'weekday 0') weeknumber,
max(day) max_day,
max(value) max_value,
max(value)-min(value) diff,
coef
from test
where day between '2016-01-19' and '2017-03-31'
group by weeknumber
)
select
weeknumber,
max_day,
(select max_hour from maxh where day=max_day) max_hour_that_day,
max_value,
diff,
coef
from result order by 1;
测试表上的结果:
2016-01-24|2016-01-24|19:45|11260.0|20.0|0.5
2016-01-31|2016-01-31|22:00|11280.0|17.0|0.6
2016-02-07|2016-02-05|10:10|11290.0|5.0|0.4
答案 2 :(得分:0)
感谢您的回复,确实有效。
但与此同时,我也找到了另一种解决方案:
SELECT strftime('%Y-%m-%d',TEST.DAY,'weekday 0')WeekNumber,
MAX(TEST.DAY)AS MAXDAY,t1.MAXHOUR,MAX(TEST.VALUE ),MAX(TEST.VALUE)-MIN(TEST.VALUE),TEST.COEF
从测试,(选择日,最大(小时)作为测试组每天最多)作为t1
GROUP BY WeekNumber,t1.DAY
有t1.DAY = MAXDAY
AND TEST.DAY&gt; ='2016-01-19'AND TEST.DAY&lt; ='2017-03-31'
再次感谢您的帮助!