【问题标题】:Getting the Sum For Each Date获取每个日期的总和
【发布时间】:2011-06-23 11:36:37
【问题描述】:

我正在用 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 年 6 月 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 年 6 月 1 日。 然后我遍历数据并在日期相同时添加值。 给我 Value1=50 和 Value2=6。

2) 所有产品的 Value1 每天的最高条目总计。 即对于 2011 年 6 月 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 的运气。

大家有什么建议吗

【问题讨论】:

  • 让它更清楚......你的意思是添加每个用户的所有 Vlaue1 和 Value2 并显示它最近的时间????
  • 对于3.为什么用户1的Value1=44,不应该是10 + 20 = 30吗?
  • 抱歉打错了,应该是用户 2,但对于用户 1 来说是 30
  • @Syeda 没有我已经这样做的代码。我需要每个产品每天结束时的 Value1 和 2,然后将所有产品相加,这样你就得到一组 value1 和 2,即用户每天结束时所有产品的总和。我稍微更新了示例以尝试清除它。

标签: c# sqlite


【解决方案1】:

好吧,周末自己解决了

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,
(SELECT USERID, PRODID, DATE(TIME) AS JUSTDATE,ID, MAX(value1) AS Mval
FROM TickData
GROUP BY 1,2,3
) AS b
WHERE a.USERID = b.USERID
AND a.ID = b.ID
AND STRFTIME('%Y-%m',a.TIME) = STRFTIME('%Y-%m','NOW')
AND a.USERID = 2
GROUP BY JUSTDATE

3)

SELECT sum(Mval) FROM TickData AS a,
(SELECT USERID, PRODID, DATE(TIME) AS JUSTDATE,ID, MIN(value1) AS Mval
FROM TickData
GROUP BY 1,2,3
) AS b
WHERE a.USERID = b.USERID
AND a.ID = b.ID
AND STRFTIME('%Y-%m',a.TIME) = STRFTIME('%Y-%m','NOW')
AND a.USERID = 2
GROUP BY JUSTDATE

编辑: 2 和 3 可以通过一个查询完成:

SELECT sum(Mval), sum(Mval2) FROM TickData AS a,
(SELECT USERID, PRODID, DATE(TIME) AS JUSTDATE,ID, MAX(PL) AS Mval,MIN(PL) AS Mval2
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 = 2
GROUP BY JUSTDATE

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2021-01-29
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多