同一零件存在多行时需要查找零件数据
Posted
技术标签:
【中文标题】同一零件存在多行时需要查找零件数据【英文标题】:Need to lookup part data when there are multiple rows of the same part 【发布时间】:2021-07-14 17:51:54 【问题描述】:我有一个 SQL 表,其中的部分带有自己的二维条码。同一零件可能有多行。每行都有一个带有 Date_Time 标记的列。
我需要获取最新的零件数据并查看其中一列以查看该值是否为 INT 1。
以下示例:查找“5”部分的最新时间戳并查看“PartStatusSt1”是否为“1”
enter image description here
enter image description here
这是我的查询:
"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 中的。
感谢您的帮助!
【问题讨论】:
请编辑您的问题并添加您的查询,并解释查询的哪一部分没有给您预期的结果 另外,请针对您正在使用的特定类型的 sql(oracle、ms-sql、mysql 等)在您的问题上添加标签 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:"select top 1 *
from [AppsData].[dbo].[OilPumpCoverTest]
where [2DMatrix] like '" & HMIRuntime.Tags("2DMatrix").Read(1) & "' order by Date_Time desc "
【讨论】:
每次选择最新的一行数据 这样更容易!谢谢!!【参考方案2】:为了获取最新的零件记录,我首先使用 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 子句来检查部件或部件状态。
【讨论】:
仅供参考case
是一个表达式而不是一个语句。
所以下面是我如何修改上面的代码,它似乎工作得很好!非常感谢!!
SELECT z.* FROM (SELECT RANK() OVER(PARTITION BY [2DMatrix] ORDER BY [Date_Time] DESC) AS rankval, [2DMatrix], [PartStatusSt1], [Date_Time] FROM [AppsData] .[dbo].[OilPumpCoverTest]) AS z WHERE z.rankval = 1 and [2DMatrix] like 'Test'
非常酷,看起来很棒。很高兴我能帮上忙!以上是关于同一零件存在多行时需要查找零件数据的主要内容,如果未能解决你的问题,请参考以下文章
怎样备份FANUC 0i零件加工程序、PMC程序、PMC 参数,CNC参数、螺距补偿、宏变量数据需要备份,对于数控机