0

我正在尝试添加每台机器引用的小时数。我必须查看三个表才能获得正确和最新的数据。我能够得到我需要添加的时间列表。

但是,我尝试了各种方法来使用 SUM() 函数,但它总是给我聚合错误。

这是SQL代码:

SELECT 
(SELECT TOP 1 change.hours 
    FROM change WHERE change.id = part.id
    ORDER BY change.timeStamp DESC) as 'Hours'

FROM change 
INNER JOIN part ON (part.id = change.id)
INNER JOIN  completed ON (part.id = completed.id) 

WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1) 
and (SELECT TOP 1 change.machine FROM change WHERE part.id = change.id ORDER BY change.timeStamp DESC ) = :machine

GROUP BY change.id, part.id

我基本上需要单个单元格的结果,这将增加每台机器的所有小时数。结果将显示在 GUI 上。

结果应该是 机器 1 必须是 12 小时 机器 2 必须是 18 小时 机器 3 必须是 18 小时

表格

部分

ID 数字 描述 工作
14 40023-10-100-10-03 根据 40023
15 40023-10-200-10-03 根据 40023
16 40024-10-100-10-01 传感器支架 40024
17 40024-10-100-10-02 40024
18 40025-10-100-10-01 传送带保持 40025
19 40025-10-200-00-01 部分 40025
20 40026-10-400-00-01 电机安装 40026
21 40026-10-200-10-10 三角洲武器 40026
22 40023-10-200-10-03 根据 40023

改变

ID 数量 小时 机器 操作员 开始时间 停止时间 完全的 日期 时间戳
14 0 0 2 2 无效的 无效的 错误的 无效的 2021-10-28 00:00:00.000
15 0 0 4 3 无效的 无效的 错误的 无效的 2021-10-28 11:01:41.427
19 0 0 3 1 无效的 无效的 错误的 无效的 2021-10-28 11:10:50.730
18 0 0 2 3 无效的 无效的 错误的 无效的 2021-10-28 11:13:46.213
16 3 2.5 2 2 无效的 无效的 错误的 2021-10-27 2021-10-28 13:41:12.393
16 3 2.5 2 2 无效的 无效的 错误的 2021-10-27 2021-10-28 13:41:12.393
15 1 9 3 3 无效的 无效的 真的 2021-10-29 2021-10-28 21:38:44.883
14 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 10:36:43.223
14 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 10:37:47.153
16 1 0.5 2 2 无效的 无效的 错误的 2021-11-01 2021-11-01 11:12:06.840
21 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 11:45:30.050
20 0 0 2 3 无效的 无效的 错误的 无效的 2021-11-10 10:44:00.000
23 0 0 0 0 无效的 无效的 真的 2021-11-02 2021-11-02 16:26:18.583
16 1 1 2 2 无效的 无效的 错误的 2021-11-01 2021-11-01 11:03:44.160
17 0 0 2 2 无效的 无效的 错误的 无效的 2021-10-28 11:25:03.967
17 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 10:40:36.850
17 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 10:42:56.350
22 0 0 3 2 无效的 无效的 错误的 无效的 2021-11-02 11:58:08.360
17 0 0 1 2 无效的 无效的 错误的 无效的 2021-11-01 10:43:44.273
14 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-01 10:44:23.440
14 0 0 1 1 无效的 无效的 错误的 无效的 2021-11-02 12:57:06.810

改变

ID 小时 数量 机器 操作员 笔记 匆忙 时间戳
14 2 3 2 1 错误的 2021-10-28 10:48:54.910
15 10 1 3 2 错误的 2021-10-28 10:49:47.643
16 7 10 2 3 需要材料 真的 2021-10-28 10:50:33.880
17 4 2 1 1 错误的 2021-10-28 00:00:00.000
18 5 1 2 2 错误的 2021-10-28 10:53:15.470
19 8 3 3 3 错误的 2021-10-28 11:10:50.573
14 3 4 1 1 等待磨坊 错误的 2021-10-29 08:12:00.000
17 4 2 1 1 真的 2021-11-01 10:40:36.707
17 4 2 1 1 真的 2021-11-01 10:42:56.150
16 8 10 2 3 需要材料 错误的 2021-11-01 10:43:29.930
17 4 2 1 2 错误的 2021-11-01 10:43:44.047
14 3 4 1 1 错误的 2021-11-01 10:44:23.317
20 2 4 2 3 错误的 2021-11-01 11:44:10.257
21 5 3 1 1 需要材料 真的 2021-11-01 11:45:29.927
22 10 1 3 2 错误的 2021-11-02 11:58:08.220
14 3 4 1 1 真的 2021-11-02 12:57:06.683
14 4 2 1 1 等待位 错误的 2021-10-29 00:00:00.000
14 3 4 1 1 错误的工厂来了。需要订购另一个 错误的 2021-11-01 10:36:42.997
14 3 4 1 1 错误的工厂来了。需要订购另一个 错误的 2021-11-01 10:37:46.983
4

2 回答 2

0

这是伟大的工作,卡洛斯。

我能够添加到您的代码中以获得我需要的结果

有显示哪台机器的输入。:machine 是输入。

SELECT ISNULL((
SELECT sum(Hours)
FROM (SELECT 
        (SELECT TOP 1 change.hours 
            FROM change WHERE change.id = part.id
            ORDER BY change.timeStamp DESC) as 'Hours'
    FROM change 
        INNER JOIN part ON (part.id = change.id)
        INNER JOIN  completed ON (part.id = completed.id) 
    
    WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1) 
    and (SELECT TOP 1 change.machine FROM change WHERE part.id = change.id ORDER BY change.timeStamp DESC) = :machine
    
    GROUP BY change.id, part.id) as a), 0)
于 2021-11-04T13:59:07.593 回答
0

好吧,我无法理解您如何计算预期结果,我相信您的查询可以改进很多(如果您更好地解释您的要求,我可以帮助您改进它)。同时,此查询返回您想要的内容:

select machine, sum(Hours) Hours from (
SELECT change.machine,
(SELECT TOP 1 change.hours 
    FROM change WHERE change.id = part.id
    ORDER BY change.timeStamp DESC) as 'Hours'

FROM change 
INNER JOIN part ON (part.id = change.id)
INNER JOIN  completed ON (part.id = completed.id) 

WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1) 
GROUP BY change.id, part.id, change.machine
) as a 
group by machine

它返回:

机器 小时
1 12
2 18
3 18

DBFiddle:https ://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=80ab33a349388896af3ffcb8954c56c9

于 2021-11-04T10:26:16.900 回答