首页 > 解决方案 > 同一零件存在多行时需要查找零件数据

问题描述

我有一个 SQL 表,其中包含带有自己的二维条码的部分。同一零件可能有多行。每行都有一个带有 Date_Time 标记的列。

我需要的是获取最新的零件数据并查看其中一列以查看该值是否为 INT 1。

下面的示例:查找“5”部分的最新时间戳,并查看“PartStatusSt1”是否为“1”

在此处输入图像描述

在此处输入图像描述

这是我的查询:

"select * from [AppsData].[dbo].[OilPumpCoverTest] where [2DMatrix] like '" & HMIRuntime.Tags("2DMatrix").Read(1) & "'"

然后我需要查看列名“PartStatusSt1”并将该 INT 值移动到 WinCC 变量,如下所述:

HMIRuntime.Tags("Sql_Station1_Status").Write
Recordset.Fields("PartStatusSt1").Value,1

上面的代码有效,但如果我有多行相同的部分(通过 2DMatrix),它会抓取随机的部分数据行。我需要获取每个 Date_Time 时间戳的最新数据。

注意:我的代码通过 VBS 在 WinCC 中。

谢谢你的帮助!

标签: sqlsql-servervbscriptwincc

解决方案


为了获得最新的零件记录,我首先使用 RANK 根据每个零件的时间戳为其分配一个编号。例如,如果 A 部分具有三个时间戳,则根据您的排序,将为每条记录分配排名 1、2 和 3。我对我使用的零件编号做了类似的事情。要获取零件的最新记录,您可以查询所有 rankval = 1 的位置。
下面的小示例...

SELECT  z.* 
FROM
(SELECT RANK() OVER(PARTITION BY PartNo, LotNumber ORDER BY DatePosted DESC) AS rankval                                                            , TagNo, PartNo, LotNumber, DatePosted FROM PartTable) AS z
--WHERE z.rankval = 1

然后,您可以使用 case 语句或 where 子句来检查部件或部件状态。


推荐阅读