[英]MS SQL SUM() using multiple tables and adding only last recorded value
I am trying to add hours quoted per machine.我正在尝试添加每台机器引用的小时数。 I have to look at three tables to get the correct and most recent data.
我必须查看三个表才能获得正确的最新数据。 I was able to get a list of the hours I need to add.
我能够获得需要添加的小时数列表。
However, I tried all kinds of ways to use a SUM() function but it always gives me aggregate errors.但是,我尝试了各种方法来使用 SUM() 函数,但它总是给我带来聚合错误。
Here is the SQL Code:这是 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
I basically need to single-cell result that will add all the hours per machine.我基本上需要单细胞结果,这将增加每台机器的所有小时数。 The result will be displayed on GUI.
结果将显示在 GUI 上。
RESULT SHOULD BE Machine 1 has to be 12 hours Machine 2 has to be 18 hours Machine 3 has to be 18 hours结果应该是机器 1 必须是 12 小时 机器 2 必须是 18 小时 机器 3 必须是 18 小时
id ![]() |
number![]() |
description![]() |
job![]() |
---|---|---|---|
14 ![]() |
40023-10-100-10-03 ![]() |
Base![]() |
40023 ![]() |
15 ![]() |
40023-10-200-10-03 ![]() |
Base![]() |
40023 ![]() |
16 ![]() |
40024-10-100-10-01 ![]() |
sensor bracket![]() |
40024 ![]() |
17 ![]() |
40024-10-100-10-02 ![]() |
Side![]() |
40024 ![]() |
18 ![]() |
40025-10-100-10-01 ![]() |
Conveyor hold![]() |
40025 ![]() |
19 ![]() |
40025-10-200-00-01 ![]() |
Part![]() |
40025 ![]() |
20 ![]() |
40026-10-400-00-01 ![]() |
Motor Mount![]() |
40026 ![]() |
21 ![]() |
40026-10-200-10-10 ![]() |
Delta arms![]() |
40026 ![]() |
22 ![]() |
40023-10-200-10-03 ![]() |
Base![]() |
40023 ![]() |
id ![]() |
qty![]() |
hours![]() |
machine![]() |
operator![]() |
startTime![]() |
stopTime![]() |
completed![]() |
date![]() |
timeStamp![]() |
---|---|---|---|---|---|---|---|---|---|
14 ![]() |
0 ![]() |
0 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-10-28 00:00:00.000 ![]() |
15 ![]() |
0 ![]() |
0 ![]() |
4 ![]() |
3 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-10-28 11:01:41.427 ![]() |
19 ![]() |
0 ![]() |
0 ![]() |
3 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-10-28 11:10:50.730 ![]() |
18 ![]() |
0 ![]() |
0 ![]() |
2 ![]() |
3 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-10-28 11:13:46.213 ![]() |
16 ![]() |
3 ![]() |
2.5 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
2021-10-27 ![]() |
2021-10-28 13:41:12.393 ![]() |
16 ![]() |
3 ![]() |
2.5 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
2021-10-27 ![]() |
2021-10-28 13:41:12.393 ![]() |
15 ![]() |
1 ![]() |
9 ![]() |
3 ![]() |
3 ![]() |
NULL![]() |
NULL![]() |
True![]() |
2021-10-29 ![]() |
2021-10-28 21:38:44.883 ![]() |
14 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:36:43.223 ![]() |
14 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:37:47.153 ![]() |
16 ![]() |
1 ![]() |
0.5 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
2021-11-01 ![]() |
2021-11-01 11:12:06.840 ![]() |
21 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 11:45:30.050 ![]() |
20 ![]() |
0 ![]() |
0 ![]() |
2 ![]() |
3 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-10 10:44:00.000 ![]() |
23 ![]() |
0 ![]() |
0 ![]() |
0 ![]() |
0 ![]() |
NULL![]() |
NULL![]() |
True![]() |
2021-11-02 ![]() |
2021-11-02 16:26:18.583 ![]() |
16 ![]() |
1 ![]() |
1 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
2021-11-01 ![]() |
2021-11-01 11:03:44.160 ![]() |
17 ![]() |
0 ![]() |
0 ![]() |
2 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-10-28 11:25:03.967 ![]() |
17 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:40:36.850 ![]() |
17 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:42:56.350 ![]() |
22 ![]() |
0 ![]() |
0 ![]() |
3 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-02 11:58:08.360 ![]() |
17 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
2 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:43:44.273 ![]() |
14 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-01 10:44:23.440 ![]() |
14 ![]() |
0 ![]() |
0 ![]() |
1 ![]() |
1 ![]() |
NULL![]() |
NULL![]() |
False![]() |
NULL![]() |
2021-11-02 12:57:06.810 ![]() |
id ![]() |
hours![]() |
qty![]() |
machine![]() |
operator![]() |
notes![]() |
rush![]() |
timeStamp![]() |
---|---|---|---|---|---|---|---|
14 ![]() |
2 ![]() |
3 ![]() |
2 ![]() |
1 ![]() |
False![]() |
2021-10-28 10:48:54.910 ![]() |
|
15 ![]() |
10 ![]() |
1 ![]() |
3 ![]() |
2 ![]() |
False![]() |
2021-10-28 10:49:47.643 ![]() |
|
16 ![]() |
7 ![]() |
10 ![]() |
2 ![]() |
3 ![]() |
Need material![]() |
True![]() |
2021-10-28 10:50:33.880 ![]() |
17 ![]() |
4 ![]() |
2 ![]() |
1 ![]() |
1 ![]() |
False![]() |
2021-10-28 00:00:00.000 ![]() |
|
18 ![]() |
5 ![]() |
1 ![]() |
2 ![]() |
2 ![]() |
False![]() |
2021-10-28 10:53:15.470 ![]() |
|
19 ![]() |
8 ![]() |
3 ![]() |
3 ![]() |
3 ![]() |
False![]() |
2021-10-28 11:10:50.573 ![]() |
|
14 ![]() |
3 ![]() |
4 ![]() |
1 ![]() |
1 ![]() |
waiting for mills![]() |
False![]() |
2021-10-29 08:12:00.000 ![]() |
17 ![]() |
4 ![]() |
2 ![]() |
1 ![]() |
1 ![]() |
True![]() |
2021-11-01 10:40:36.707 ![]() |
|
17 ![]() |
4 ![]() |
2 ![]() |
1 ![]() |
1 ![]() |
True![]() |
2021-11-01 10:42:56.150 ![]() |
|
16 ![]() |
8 ![]() |
10 ![]() |
2 ![]() |
3 ![]() |
Need material![]() |
False![]() |
2021-11-01 10:43:29.930 ![]() |
17 ![]() |
4 ![]() |
2 ![]() |
1 ![]() |
2 ![]() |
False![]() |
2021-11-01 10:43:44.047 ![]() |
|
14 ![]() |
3 ![]() |
4 ![]() |
1 ![]() |
1 ![]() |
False![]() |
2021-11-01 10:44:23.317 ![]() |
|
20 ![]() |
2 ![]() |
4 ![]() |
2 ![]() |
3 ![]() |
False![]() |
2021-11-01 11:44:10.257 ![]() |
|
21 ![]() |
5 ![]() |
3 ![]() |
1 ![]() |
1 ![]() |
Need material![]() |
True![]() |
2021-11-01 11:45:29.927 ![]() |
22 ![]() |
10 ![]() |
1 ![]() |
3 ![]() |
2 ![]() |
False![]() |
2021-11-02 11:58:08.220 ![]() |
|
14 ![]() |
3 ![]() |
4 ![]() |
1 ![]() |
1 ![]() |
True![]() |
2021-11-02 12:57:06.683 ![]() |
|
14 ![]() |
4 ![]() |
2 ![]() |
1 ![]() |
1 ![]() |
waiting for bits![]() |
False![]() |
2021-10-29 00:00:00.000 ![]() |
14 ![]() |
3 ![]() |
4 ![]() |
1 ![]() |
1 ![]() |
wrong mills came.![]() ![]() |
False![]() |
2021-11-01 10:36:42.997 ![]() |
14 ![]() |
3 ![]() |
4 ![]() |
1 ![]() |
1 ![]() |
wrong mills came.![]() ![]() |
False![]() |
2021-11-01 10:37:46.983 ![]() |
Well, I cannot understand how do you calculate the expected results and I am sure your query can be improved a lot (if you explain better your requirements, I can help you to improve it).好吧,我不明白你是如何计算预期结果的,我相信你的查询可以改进很多(如果你更好地解释你的要求,我可以帮助你改进它)。 Meanwhile, this query returns what you want:
同时,此查询返回您想要的内容:
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
It returns:它返回:
machine![]() |
Hours![]() |
---|---|
1 ![]() |
12 ![]() |
2 ![]() |
18 ![]() |
3 ![]() |
18 ![]() |
DBFiddle: https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=80ab33a349388896af3ffcb8954c56c9 DBFiddle: https ://dbfiddle.uk/ ? rdbms = sqlserver_2019 & fiddle = 80ab33a349388896af3ffcb8954c56c9
That's great work, Carlos.这是伟大的工作,卡洛斯。
I was able to add to your code to get the results I need我能够添加到您的代码中以获得我需要的结果
There is input of which machine is displaying.有显示哪台机器的输入。 :machine is the input.
: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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.