问题描述
|
我正在用C#编写一个程序,该程序可以读写sqlite(System.Data.sqlite)
我有一张看起来像这样的桌子
UserID ProdID Value1 Value2 TIME
------------------------------------------------
1 1 10 1 2011-06-01 10:20:30.333
1 2 20 3 2011-06-01 10:20:30.444
2 1 100 11 2011-06-01 10:20:30.333
2 2 22 32 2011-06-01 10:20:30.444
1 1 20 2 2011-06-01 10:30:30.333
1 2 30 4 2011-06-01 10:30:30.444
2 1 22 22 2011-06-01 10:30:30.333
2 2 33 44 2011-06-01 10:30:30.444
1 1 10 1 2011-06-02 10:20:30.333
1 2 20 3 2011-06-02 10:20:30.444
2 1 11 11 2011-06-02 10:20:30.333
2 2 22 32 2011-06-02 10:20:30.444
1 1 20 2 2011-06-02 10:30:30.333
1 2 30 4 2011-06-02 10:30:30.444
2 1 22 22 2011-06-02 10:30:30.333
2 2 33 44 2011-06-02 10:30:30.444
我需要为每个用户从中获得三件事。
1)值1和2的每个产品在一天中的最后输入项总计,因此其一两个值即所有产品的总和。
即,对于2011年1月1日的用户1,它将是Value1 = 50和Value2 = 6。
我目前使用:
SELECT * FROM TickData AS a,;
(SELECT USERID,DATE(TIME) AS JUSTDATE,MAX(TIME) AS MTIME;
FROM TickData;
GROUP BY 1,2;
) AS b;
WHERE a.USERID = b.USERID;
AND a.TIME = b.MTIME;
AND STrftIME(\'%Y-%m\',a.TIME) = STrftIME(\'%Y-%m\',\'Now\');
AND a.USERID = 1;
这将返回:
UserID ProdID Value1 Value2 TIME
------------------------------------------------
1 1 20 2 2011-06-01 10:30:30.333
1 2 30 4 2011-06-01 10:30:30.444
对于2011-06-01。
然后我遍历数据并在日期相同时添加值。
给我Value1 = 50和Value2 = 6。
2)所有产品的“ Value1”每天最高条目合计。
即,对于2011年2月1日的用户2,它将为Value1 = 133。
UserID ProdID Value1 Value2 TIME
------------------------------------------------
2 1 100 11 2011-06-01 10:20:30.333
2 2 33 44 2011-06-01 10:30:30.444
3)所有产品的“ Value1”每天最低条目合计。
即,对于2011年6月1日的用户2,它将为Value1 = 44。
UserID ProdID Value1 Value2 TIME
------------------------------------------------
2 2 22 32 2011-06-01 10:20:30.444
2 1 22 22 2011-06-01 10:30:30.333
我还没有2或3的运气。
有人有任何建议吗
解决方法
好的,周末我要锻炼自己
1)
SELECT sum(value1),sum(value2) FROM TickData AS a,(SELECT USERID,PRODID,DATE(TIME) AS JUSTDATE,MAX(TIME) AS MTIME
FROM TickData
GROUP BY 1,2,3
) AS b
WHERE a.USERID = b.USERID
AND a.TIME = b.MTIME
AND STRFTIME(\'%Y-%m\',a.TIME) = STRFTIME(\'%Y-%m\',\'NOW\')
AND a.USERID = 1
GROUP BY JUSTDATE
2)
SELECT sum(Mval) FROM TickData AS a,ID,MAX(value1) AS Mval
FROM TickData
GROUP BY 1,3
) AS b
WHERE a.USERID = b.USERID
AND a.ID = b.ID
AND STRFTIME(\'%Y-%m\',\'NOW\')
AND a.USERID = 2
GROUP BY JUSTDATE
3)
SELECT sum(Mval) FROM TickData AS a,MIN(value1) AS Mval
FROM TickData
GROUP BY 1,\'NOW\')
AND a.USERID = 2
GROUP BY JUSTDATE
编辑:
2和3可以通过一个查询完成:
SELECT sum(Mval),sum(Mval2) FROM TickData AS a,MAX(PL) AS Mval,MIN(PL) AS Mval2
FROM TickData
GROUP BY 1,\'NOW\')
AND a.USERID = 2
GROUP BY JUSTDATE