今日计划-2024年7月23日

今日计划-2024年7月23日

下载几部电影

《人类》

下载几首歌曲

优化sqlserver查询语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
USE [YHWCS]
GO
/****** Object: StoredProcedure [dbo].[P_时间统计报表] Script Date: 2024/7/23 11:09:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:xiaoxianghui
-- Create date: 2024年7月5日
-- Description: 时间统计数据
-- =============================================
ALTER PROCEDURE [dbo].[P_时间统计报表]
@TaskNo nvarchar(50) = NULL,
@PalletId nvarchar(50) = NULL,
@PositionId nvarchar(50) = NULL,
@Tunner nvarchar(50) = NULL,
@PLCType nvarchar(50) = NULL,
@IoDate datetime = NULL

AS
BEGIN
SELECT
--distinct tps.Cn, tps.Id,
tps.CreateTime as "创建时间",
tps.Name as "设备名称",
case tps.PLCType
when 1 then '入库'
when 2 then '出库'
when 4 then '移库'
end as "指令类型",
tps.TaskNo as "工作编号",
tps.BarCode as "托盘编号",
tps.StartTime as "开始时间",
tps.EndTime as "结束时间",
--DATEDIFF(SECOND, tps.StartTime, tps.EndTime) AS "工作时间(秒)",
CASE
WHEN tps.PLCType = 1 AND tps.Name = '一层输送线' THEN NewTimeSubQuery1.NewTime
WHEN tps.PLCType = 2 AND tps.Name = '一层输送线' THEN NewTimeSubQuery2.NewTime
WHEN tps.PLCType in (1, 2) AND tps.Name = '双工位RGV' THEN NewTimeSubQuery3.NewTime
WHEN tps.PLCType in (1, 2) AND tps.Name like '%堆垛机' THEN NewTimeSubQuery4.NewTime
--WHEN tps.PLCType = 2 AND tps.Name = '双工位RGV' THEN NewTimeSubQuery5.NewTime
--WHEN tps.PLCType = 2 AND tps.Name like '%堆垛机' THEN NewTimeSubQuery6.NewTime
WHEN tps.PLCType = 1 AND tps.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN NewTimeSubQuery7.NewTime
WHEN tps.PLCType = 2 AND tps.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN NewTimeSubQuery8.NewTime
WHEN tps.PLCType = 4 AND tps.Name like '%堆垛机' THEN NewTimeSubQuery9.NewTime
ELSE NULL
END AS "流程时间(秒)",
--tps.StartDesign ,
--tps.EndDesign ,
--toh.ordIdNew as "工作编号",
--toh.palletId as "托盘编号",
--toh.srcPositionId as "移出仓位",
--toh.positionId as "仓位编号",
case toh.optType
when 0 then 'WMS错误' when 1 then '整入' when 2 then '补入' when 3 then '整出' when 4 then '分拣' when 5 then '空入' when 6 then '空出/补出' when 7 then '空盘移库' when 8 then '盘库' when 9 then '盘库返库' when 10 then '实盘移库' when 11 then '转移出库' when 12 then '转移入库' when 13 then '移动穿梭车'
end as "工控类型",
toh.ioDate as "工控日期",
--toh.optStation as "操作台",
--toh.pHs as "分配台位",
case toh.design
when -2 then '被删除的指令' when -1 then '待执行' when 0 then '堆垛机待命' when 1 then '堆垛机工作' when 2 then '未过账' when 3 then '已过帐' when 5 then '分拣到达' when 6 then '分拣返回' when 7 then '执行入库' when 8 then '重入未过账' when 9 then '重入已过账' when 10 then 'RGV待命' when 11 then 'RGV工作' when 12 then '线体等待'
end as "工控进程",
--toh.userId as "操作员",
case toh.sysType
when 0 then 'wms' when 1 then 'RF' when 2 then 'DPS' when 3 then '其他'
end as "系统下发",
case toh.byHand
when 0 then '自动' when 1 then '手动'
end as "指令方式",
--case toh.mStatus
-- when 0 then '已组盘' when 1 then '待执行' when 2 then '正在执行'
-- end as "生成状态",
case toh.dStatus
when 0 then '正常' when 1 then '暂停'
end as "执行状态",
--case toh.pltReturn
-- when 0 then '线体上' when 1 then '线体下'
-- end as "运动状态",
--case toh.PlcType
-- when 1 then '入库' when 2 then '出库' when 4 then '移库'
-- end as "指令类型",
toh.tunner as "巷道",
toh.mBillIds as "订单主编号集合"

FROM
tPLCServerLog tps
LEFT JOIN
tOrderHy toh ON tps.TaskNo = toh.ordIdNew AND tps.BarCode = toh.palletId
OUTER APPLY
(
SELECT
COALESCE(
DATEDIFF(SECOND,
MIN(CASE WHEN tps2.Name = '一层输送线' THEN tps2.StartTime ELSE NULL END),
MAX(CASE WHEN tps2.Name = '双工位RGV' THEN tps2.StartTime ELSE NULL END)),
DATEDIFF(SECOND,
MIN(CASE WHEN tps2.Name = '一层输送线' THEN tps2.StartTime END),
MAX(CASE WHEN tps2.Name = '一层输送线' THEN tps2.EndTime END))
) AS NewTime
FROM
tPLCServerLog tps2
--left join tOrderHy toh2 ON tps2.TaskNo = toh2.ordIdNew AND tps2.BarCode = toh2.palletId
WHERE
tps2.TaskNo = tps.TaskNo AND
tps2.BarCode = tps.BarCode AND
tps2.PLCType = 1
--DATEDIFF(SECOND, tps2.StartTime, tps2.EndTime) < 86400 and
--tps2.StartTime < tps2.EndTime and
--tps2.EndTime < toh2.ioDate and
--toh2.ordIdNew is not NULL and toh2.palletId is not NULL
) NewTimeSubQuery1
OUTER APPLY
(
SELECT
COALESCE(
DATEDIFF(SECOND,
MIN(CASE WHEN tps3.Name = '双工位RGV' THEN tps3.EndTime ELSE NULL END),
MAX(CASE WHEN tps3.Name = '一层输送线' THEN tps3.EndTime ELSE NULL END)
),
DATEDIFF(SECOND,
MAX(CASE WHEN tps3.Name = '一层输送线' THEN tps3.StartTime ELSE NULL END),
MAX(CASE WHEN tps3.Name = '一层输送线' THEN tps3.EndTime ELSE NULL END)
)) AS NewTime
FROM
tPLCServerLog tps3
--left join tOrderHy toh3 ON tps3.TaskNo = toh3.ordIdNew AND tps3.BarCode = toh3.palletId
WHERE
tps3.TaskNo = tps.TaskNo AND
tps3.BarCode = tps.BarCode AND
tps3.PLCType = 2
--DATEDIFF(SECOND, tps3.StartTime, tps3.EndTime) < 86400 and
--tps3.StartTime < tps3.EndTime and
----tps3.EndTime < toh3.ioDate and
--toh3.ordIdNew is not NULL and toh3.palletId is not NULL
) NewTimeSubQuery2
OUTER APPLY
(
SELECT
MIN(DATEDIFF(SECOND,
(CASE WHEN tps4.Name = '双工位RGV' THEN tps4.StartTime ELSE NULL END),
(CASE WHEN tps4.Name = '双工位RGV' THEN tps4.EndTime ELSE NULL END)
)) AS NewTime
FROM
tPLCServerLog tps4
--left join tOrderHy toh4 ON tps4.TaskNo = toh4.ordIdNew AND tps4.BarCode = toh4.palletId
WHERE
tps4.TaskNo = tps.TaskNo AND
tps4.BarCode = tps.BarCode AND
tps4.PLCType in (1, 2)
--DATEDIFF(SECOND, tps4.StartTime, tps4.EndTime) < 86400 and
--tps4.StartTime < tps4.EndTime and
--tps4.EndTime < toh4.ioDate and
--toh4.ordIdNew is not NULL and toh4.palletId is not NULL
) NewTimeSubQuery3
OUTER APPLY
(
SELECT
COALESCE(
DATEDIFF(SECOND,
MAX(CASE WHEN tps5.Name like '%堆垛机' THEN tps5.StartTime ELSE NULL END),
MAX(CASE WHEN tps5.Name like '%堆垛机' THEN tps5.EndTime ELSE NULL END)),
DATEDIFF(SECOND,
MAX(CASE WHEN tps5.Name like '%堆垛机' THEN tps5.StartTime ELSE NULL END),
MAX(CASE WHEN tps5.Name like '%堆垛机' THEN toh5.ioDate ELSE NULL END))
) AS NewTime
FROM
tPLCServerLog tps5
left join tOrderHy toh5 ON tps5.TaskNo = toh5.ordIdNew AND tps5.BarCode = toh5.palletId
WHERE
tps5.TaskNo = tps.TaskNo AND
tps5.BarCode = tps.BarCode AND
tps5.PLCType in (1, 2)
--DATEDIFF(SECOND, tps5.StartTime, tps5.EndTime) < 86400 and
--tps5.StartTime < tps5.EndTime and
--toh5.ordIdNew is not NULL and toh5.palletId is not NULL
----tps5.EndTime < toh5.ioDate
) NewTimeSubQuery4
--OUTER APPLY
--(
-- SELECT
-- MIN(DATEDIFF(SECOND,
-- (CASE WHEN tps6.Name = '双工位RGV' THEN tps6.StartTime ELSE NULL END),
-- (CASE WHEN tps6.Name = '双工位RGV' THEN tps6.EndTime ELSE NULL END)
-- )) AS NewTime
-- FROM
-- tPLCServerLog tps6
-- --left join tOrderHy toh6 ON tps6.TaskNo = toh6.ordIdNew AND tps6.BarCode = toh6.palletId
-- WHERE
-- tps6.TaskNo = tps.TaskNo AND
-- tps6.BarCode = tps.BarCode AND
-- tps6.PLCType = 2
-- --DATEDIFF(SECOND, tps6.StartTime, tps6.EndTime) < 86400 and
-- --tps6.StartTime < tps6.EndTime and
-- --tps6.EndTime < toh6.ioDate and
-- --toh6.ordIdNew is not NULL and toh6.palletId is not NULL
--) NewTimeSubQuery5
--OUTER APPLY
--(
-- SELECT
-- DATEDIFF(SECOND,
-- MAX(CASE WHEN tps7.Name like '%堆垛机' THEN tps7.StartTime ELSE NULL END),
-- MAX(CASE WHEN tps7.Name like '%堆垛机' THEN tps7.EndTime ELSE NULL END)
-- ) AS NewTime
-- FROM
-- tPLCServerLog tps7
-- --left join tOrderHy toh7 ON tps7.TaskNo = toh7.ordIdNew AND tps7.BarCode = toh7.palletId
-- WHERE
-- tps7.TaskNo = tps.TaskNo AND
-- tps7.BarCode = tps.BarCode AND
-- tps7.PLCType = 2
-- --DATEDIFF(SECOND, tps7.StartTime, tps7.EndTime) < 86400 and
-- --tps7.StartTime < tps7.EndTime and
-- --tps7.EndTime < toh7.ioDate and
-- --toh7.ordIdNew is not NULL and toh7.palletId is not NULL
--) NewTimeSubQuery6
OUTER APPLY
(
SELECT
DATEDIFF(SECOND,
MAX(CASE WHEN tps8.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN tps8.StartTime ELSE NULL END),
MAX(CASE WHEN tps8.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN tps8.EndTime ELSE NULL END)
) AS NewTime
FROM
tPLCServerLog tps8
--left join tOrderHy toh8 ON tps8.TaskNo = toh8.ordIdNew AND tps8.BarCode = toh8.palletId
WHERE
tps8.TaskNo = tps.TaskNo AND
tps8.BarCode = tps.BarCode AND
tps8.PLCType = 1
--DATEDIFF(SECOND, tps8.StartTime, tps8.EndTime) < 86400 and
--tps8.StartTime < tps8.EndTime and
--tps8.EndTime < toh8.ioDate and
--toh8.ordIdNew is not NULL and toh8.palletId is not NULL
) NewTimeSubQuery7
OUTER APPLY
(
SELECT
DATEDIFF(SECOND,
MAX(CASE WHEN tps9.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN tps9.StartTime ELSE NULL END),
MAX(CASE WHEN tps9.Name not in ( '一层输送线','双工位RGV', '%堆垛机') THEN tps9.EndTime ELSE NULL END)
) AS NewTime
FROM
tPLCServerLog tps9
--left join tOrderHy toh9 ON tps9.TaskNo = toh9.ordIdNew AND tps9.BarCode = toh9.palletId
WHERE
tps9.TaskNo = tps.TaskNo AND
tps9.BarCode = tps.BarCode AND
tps9.PLCType = 2
--DATEDIFF(SECOND, tps9.StartTime, tps9.EndTime) < 86400 and
--tps9.StartTime < tps9.EndTime and
--tps9.EndTime < toh9.ioDate and
--toh9.ordIdNew is not NULL and toh9.palletId is not NULL
) NewTimeSubQuery8
OUTER APPLY
(
SELECT
DATEDIFF(SECOND,
MAX(CASE WHEN tps10.Name like '%堆垛机' THEN tps10.StartTime ELSE NULL END),
MAX(CASE WHEN tps10.Name like '%堆垛机' THEN tps10.EndTime ELSE NULL END)
) AS NewTime
FROM
tPLCServerLog tps10
--left join tOrderHy toh10 ON tps10.TaskNo = toh10.ordIdNew AND tps10.BarCode = toh10.palletId
WHERE
tps10.TaskNo = tps.TaskNo AND
tps10.BarCode = tps.BarCode AND
tps10.PLCType = 4
--DATEDIFF(SECOND, tps10.StartTime, tps10.EndTime) < 86400 and
--tps10.StartTime < tps10.EndTime and
--toh10.ordIdNew is not NULL and toh10.palletId is not NULL
--tps10.EndTime < toh10.ioDate
) NewTimeSubQuery9
where
-- --DATEDIFF(SECOND, tps.StartTime, tps.EndTime) < 86400 and
-- tps.Cn <> 0 AND
-- tps.StartTime IS NOT NULL AND
-- tps.EndTime IS NOT NULL AND
-- --tps.StartTime < tps.EndTime AND
-- toh.ordIdNew is not NULL and toh.palletId is not NULL
-- --DATEDIFF(SECOND, tps.StartTime, tps.EndTime) > 5
-- --AND tps.TaskNo = '17731' and tps.BarCode = 'T03452'
(@Tunner IS NULL OR @Tunner = '' OR toh.tunner = @Tunner)
AND (@TaskNo IS NULL OR @TaskNo = '' OR tps.TaskNo = @TaskNo)
AND (@PalletId IS NULL OR @PalletId = '' OR toh.palletId = @PalletId)
AND (@PositionId IS NULL OR @PositionId = '' OR toh.positionId = @PositionId OR srcpositionid=@PositionId)
AND (@PLCType IS NULL OR @PLCType = '' OR tps.PLCType = @PLCType)
AND (@IoDate IS NULL OR @IoDate = '' OR convert(varchar(10),toh.ioDate,21) = convert(varchar(10),@IoDate,21))
--order by tps.TaskNo, tps.BarCode

END

学习sqlserver

看了《SQL基础教程》+《SQL进阶教程》学习笔记
个人总结:
1.sql里面用到的是声明式思维和面向集合对象思维
2.sql谓词
3.一阶谓词(输入是行数据)、二阶谓词(输入是集合)、三阶谓词(输入是集合的集合)…

看一个算法

遗传算法的应用案列-航运路径优化
正在看:一文读懂遗传算法基础知识与实际应用


今日计划-2024年7月23日
http://example.com/2024/07/23/今日计划-2024年7月23日/
Beitragsautor
XiangHui
Veröffentlicht am
July 23, 2024
Urheberrechtshinweis