gpt4 book ai didi

java - SQLite 分组并按工作类次排序

转载 作者:太空宇宙 更新时间:2023-11-04 14:49:04 25 4
gpt4 key购买 nike

我有一个查询需要执行基于运行总和的查询关于日期/时间和类次。

轮类时间为上午 6:00 至下午 4:30下午 6:00 至凌晨 4:30。

我使用的查询引擎是SQLite。

我在执行以下 SQL 查询时遇到问题。下面您将看到查询和当前结果,然后是期望的结果。当前结果未按日期/时间/类次正确排序导致总数量列也显示不正确的数据。

有没有人以前遇到过这个问题并且可以插入我朝正确的方向前进。我愿意接受建议即使我必须在没有查询的情况下对数据进行排序,最好使用java.

SELECT tdate, qty, shift,
(
SELECT sum( b.qty )
FROM table1 AS b
WHERE (
(
( b.id <= a.id AND b.shift = a.shift)
)
)
GROUP BY date(b.tdate)
)
AS bo_total
FROM table1 AS a
ORDER BY date( a.tdate ) ASC, a.shift ASC

当前结果

DATE/TIME             QTY          SHIFT   TOTAL QTY
2014-04-21 07:19:00 60 first 60
2014-04-21 08:45:00 60 first 120
2014-04-21 09:52:00 60 first 180
2014-04-21 13:26:00 60 first 240
2014-04-21 18:51:00 60 second 60
2014-04-21 20:56:00 60 second 120
2014-04-22 06:52:00 60 first 60
2014-04-22 11:56:00 60 first 120
2014-04-22 19:12:00 60 second 60
2014-04-22 20:30:00 60 second 120
2014-04-22 00:50:00 60 second 120
2014-04-23 06:23:00 60 first 60
2014-04-23 09:19:00 60 first 120
2014-04-23 22:11:00 60 second 60
2014-04-23 19:39:00 60 second 120
2014-04-23 00:55:00 60 second 120
2014-04-24 06:59:00 60 first 60
2014-04-24 07:40:00 60 first 120
2014-04-24 16:03:00 60 first 240
2014-04-24 00:42:00 60 second 60
2014-04-24 20:25:00 60 second 120
2014-04-24 00:39:00 60 second 60
2014-04-24 02:32:00 60 second 60

期望的结果

DATE/TIME              QTY            SHIFT   TOTAL QTY
2014-04-21 07:19:00 60 first 60
2014-04-21 08:45:00 60 first 120
2014-04-21 09:52:00 60 first 180
2014-04-21 13:26:00 60 first 240
2014-04-21 18:51:00 60 second 60
2014-04-21 20:56:00 60 second 120
2014-04-22 00:50:00 60 second 180
2014-04-22 06:52:00 60 first 60
2014-04-22 11:56:00 60 first 120
2014-04-22 19:12:00 60 second 60
2014-04-22 20:30:00 60 second 120
2014-04-23 00:55:00 60 second 180
2014-04-23 06:23:00 60 first 60
2014-04-23 09:19:00 60 first 120
2014-04-23 19:39:00 60 second 60
2014-04-23 22:11:00 60 second 120
2014-04-24 00:39:00 60 second 180
2014-04-24 00:42:00 60 second 240
2014-04-24 02:32:00 60 second 300
2014-04-24 06:59:00 60 first 60
2014-04-24 07:40:00 60 first 120
2014-04-24 16:03:00 60 first 180
2014-04-24 20:25:00 60 second 60

示例方案

CREATE TABLE Table1 ( 
ID INTEGER PRIMARY KEY AUTOINCREMENT,
qty STRING,
tdate STRING,
shift STRING
);

INSERT Into Table1 values(NULL,'60','2014-05-16 08:38:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-16 00:15:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-16 15:48:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-16 19:46:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-16 21:44:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-17 00:25:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-17 03:45:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-15 06:02:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-15 08:40:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-15 11:05:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-15 13:48:00','first');
INSERT Into Table1 values(NULL,'6','2014-05-15 16:08:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-15 19:08:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-15 21:26:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-16 01:16:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-16 04:09:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-14 05:49:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-14 09:58:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-14 13:33:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-14 18:53:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-15 00:09:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-15 02:50:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 06:32:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-13 09:19:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-13 00:13:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 13:15:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-13 18:28:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 21:04:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 22:26:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-14 00:44:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-14 02:35:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-12 06:20:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-12 07:12:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-12 09:25:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-12 00:01:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-12 14:51:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-12 19:11:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-12 21:19:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 00:07:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-13 02:17:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-10 08:15:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-10 09:36:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-10 09:37:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-10 11:59:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-10 14:44:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-10 19:17:00','second');
INSERT Into Table1 values(NULL,'13','2014-05-10 21:43:00','second');
INSERT Into Table1 values(NULL,'58','2014-05-10 21:43:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-11 00:30:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-11 02:41:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-09 06:12:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-09 09:07:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-09 11:57:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-09 14:20:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-09 18:41:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-09 21:03:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-09 23:56:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-10 01:43:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-10 03:28:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-10 04:19:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-08 06:04:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-08 09:17:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-08 11:12:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-08 20:16:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-08 21:24:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-09 00:03:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-09 01:53:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-07 06:13:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-07 07:34:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-07 09:25:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-07 00:45:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-07 20:19:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-07 21:50:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-08 00:11:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-08 02:33:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-06 06:09:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-06 07:42:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-06 09:12:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-06 00:43:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-06 18:47:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-06 21:09:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-06 23:14:00','second');
INSERT Into Table1 values(NULL,'50','2014-05-06 23:16:00','second');
INSERT Into Table1 values(NULL,'61','2014-05-06 23:16:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-07 00:20:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-07 02:09:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-05 06:45:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-05 08:12:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-05 10:27:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-05 14:32:00','first');
INSERT Into Table1 values(NULL,'60','2014-05-05 19:46:00','second');
INSERT Into Table1 values(NULL,'60','2014-05-05 22:18:00','second');

最佳答案

此查询首先计算类次开始的日期,这使得类次比较更容易:

WITH a AS
(SELECT ID,
qty,
tdate,
shift,
CASE
WHEN time(tdate) BETWEEN '05:30' AND '17:00'
THEN date(tdate) || ' first'
WHEN time(tdate) >= '17:30' THEN date(tdate) || ' second'
WHEN time(tdate) <= '05:00' THEN date(tdate, '-1 day') || ' second'
END AS ShiftID
FROM Table1)
SELECT tdate,
qty,
shift,
(SELECT sum(qty)
FROM a AS b
WHERE b.ShiftID = a.ShiftID
AND b.tdate <= a.tdate
) AS bo_total
FROM a
ORDER BY tdate

如果您的 SQLite 驱动程序早于 3.8.3,请使用 View 而不是 CTE。

关于java - SQLite 分组并按工作类次排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com