我對DISTINCT、GROUP BY子句感到非常困惑,我無法理解我需要做什么來獲得我想要的值。
我的表格(簡化)
CREATE TABLE manufacturing(
[id] [int] IDENTITY(1, 1) NOT NULL,
[dt] [datetime] NOT NULL,
[parcel_id] [int] NULL,
[batch_no] [int] NULL,
[tn] [int] NULL[/span]。
歸檔
每個parcel_id都有batch_no 1到'anything',batch_no有tn 1到'anything',所以它們不是固定的最大數字。
當一臺機器完成一個步驟(tn)時,它將其寫入DB
我需要獲得資料庫中每小時有多少個批次(從0到24)。 一個批次可以在15:00開始,在17:00結束,我需要把它寫到17。我所嘗試的是
SELECT COUNT(parcel_batch) as batch_count, dt
FROM (SELECT parcel_batch as parcel_batch, MAX(dt)as dt
FROM (SELECT DISTINCT(CONVERT(varchar, parcel_id) CONVERT(varchar, batch_no) ) as parcel_batch, DATEPART(HOUR, dt) as dt
FROM制造 WHERE DATEPART(YEAR, dt) = 2021 AND DATEPART(MONTH, dt) = 09 AND DATEPART(DAY, dt) = 15 AND fabrika = 2) as qq group by parcel_batch) as new group by dt
我在第1個問題(第3行)嘗試的是將包裹和批處理結合起來,可以給我唯一的號碼,這樣我就可以DISTINCT。一開始,在我的測驗值中,它似乎是有效的。然后我把它用在真正的資料庫上(這個資料庫要大得多),它沒有正確地給出答案。
我得到了今天的總批次,像這樣
我得到了今天的總批次。
SELECT DISTINCT rh. parcel_id, CONVERT(varchar, MIN(rah. dt), CONVERT(varchar, MAX(rh. dt)), MAX(rh.batch_no) FROM manufacturing as rh.
WHERE DATEPART(YEAR, rh.dt) = DATEPART(YEAR, GETDATE()
and DATEPART(MONTH, rh.dt) = DATEPART(MONTH, GETDATE()
and DATEPART(DAY, rh.dt) = DATEPART(DAY, GETDATE()
GROUP BY rh.parcel_id
但是我真的想不出如何獲得每小時有多少個批次,因為我無法理解DISTINCT(我猜它需要SELECT后的所有內容,我以為只有第一個或其他)或GROUP BY
。謝謝你的幫助。
更新:
這是我的資料的樣子。
BEGIN TRANSACTION
INSERT INTO manufacturing VALUES(CONVERT(datetime,'2021-09-15 00:03:00'). 000'),290, 1, 45)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 00:05:00'), CONVERT. 000'),290, 1, 48)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 00:34:00'), CONVERT. 000'),290, 2, 44)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 00:47:00'), CONVERT. 000'),291, 1, 58)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 00:54:00'), CONVERT. 000'),291, 1, 43)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 00:58:00'), CONVERT. 000'),291, 1, 43)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 01:02:00'), CONVERT. 000'),291, 1, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 01:08:00'), CONVERT. 000'),291, 1, 41)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 01:24:00'), CONVERT. 000'),291, 2, 46)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 01:36:00'), CONVERT. 000'),291, 2, 47)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 01:58:00'), CONVERT. 000'),291, 3, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 02:04:00'), CONVERT. 000'),291, 3, 42)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 02:23:00'), CONVERT. 000'),291, 3, 52)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 02:54:00'), CONVERT. 000'),292, 1, 57)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 02:55:00'), CONVERT. 000'),292, 1, 53)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 02:59:00'), CONVERT. 000'),292, 2, 48)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 03:12:00'), CONVERT. 000'),292, 2, 45)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 03:15:00'), '2021-09-15 03:15:00. 000'),292, 2, 44)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 03:22:00'), CONVERT. 000'),292, 3, 51)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 03:46:00'), CONVERT. 000'),293, 1, 58)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 03:55:00'), CONVERT. 000'),293, 1, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 04:24:00'), CONVERT. 000'),293, 2, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 04:33:00'), CONVERT. 000'),293, 2, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 04:45:00'), CONVERT. 000'),294, 1, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 04:46:00'), CONVERT. 000'),294, 1, 57)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 04:58:00'), CONVERT. 000'),294, 1, 1)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:23:00'), CONVERT. 000'),295, 1, 1)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:32:00'), CONVERT. 000'),295, 1, 53)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:35:00'), '2021-09-15 05:35:00. 000'),295, 2, 51)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:38:00'), CONVERT. 000'),295, 3, 1)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:43:00'), CONVERT. 000'),296, 1, 52)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:47:00'), CONVERT. 000'),296, 1, 52)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 05:49:00'), CONVERT. 000'),296, 1, 52)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 06:45:00'), CONVERT. 000'),296, 1, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 06:47:00'), '2021-09-15 06:47:00. 000'),296, 2, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 06:53:00'), CONVERT. 000'),296, 2, 2)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 06:56:00'), CONVERT. 000'),296, 2, 3)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 06:58:00'), '2021-09-15 06:58:00. 000'),296, 3, 7)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 07:26:00'), CONVERT. 000'),296, 3, 1)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 07:35:00'), CONVERT. 000'),296, 4, 1)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 07:42:00'), CONVERT. 000'),296, 5, 43)
INSERT INTO制造VALUES(CONVERT(datetime,'2021-09-15 07:46:00'), CONVERT. 000'),296, 5, 43)
SELECT * FROM制造業
COMMIT TRANSACTION
我需要的是上表的輸出:
我需要的是上表的輸出。
-------------------
| dt | batch_count|
-------------------
| 0 | 2 |
| 1 | 2 |
| 2 | 2 |
| 3 | 3 |
| 4 | 2 |
| 5 | 3 |
| 6 | 2 |
| 7 | 3 |
-------------------
18的總數除以小時。
uj5u.com熱心網友回復:
我相信下面的方法可以獲得你想要的結果。它仍然在計算每小時的不同批次,但排除了你不想計算的批次,因為它們不在當前小時內結束。日期范圍的適應性與這個問題無關,你可以在必要時添加進去。
select DatePart(hour, dt) hr, Count(distinct batch_no) batch_count
from manufacturing m
where not exists (
select * from manufacturing m2
where m2.parcel_id=m.parcel_id
and m2.batch_no=m.batch_no
and DatePart(hour, m2.dt)> DatePart(hour, m.dt)
)
group by DatePart(hour, dt)
uj5u.com熱心網友回復:
你似乎是在描述:
SELECT parcel_id, DATEPART(hour, rh. dt), COUNT(DISTINCT rh.batch_no)
FROM manufacturing rh
WHERE rh.dt >= CONVERT(DATE, GETDATE() and(DATE, GETDATE()
rh.dt < DATEADD(DAY, 1, CONVERT(DATE, GETDATE()
GROUP BY rh.parcel_id, DATEPART(hour, rh.dt)。
注意對日期比較進行的簡化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311045.html
標籤:
