我的sql字符串关闭了一点点,我需要帮助才能完全正确。我尝试过很多没有运气的字符串。 I've tried most of the examples in this thread, with no luck.关于sql,这里只是结果的截图:
我希望它只显示PRecipeRunning和ERecipeRunning的最新DateTime的值。
I have setup a SQLFiddle here, with the schema and the grab everything code.
[编辑,将我的两个分手分成两个单独的问题。这是sql问题,我将为Visual Studio部分做另一个。]
答案 0 :(得分:1)
以下是通过TagName
查找最新日期时间值的查询SELECT A.[DateTime]
,A.[TagName]
,A.[Value]
FROM [v_StringHistory] A
INNER JOIN
(SELECT MAX(B.[DateTime]) [MaxDate]
,B.[TagName]
FROM [v_StringHistory] B
GROUP BY B.[TagName]) MD
ON MD.[TagName] = A.[TagName]
AND A.[DateTime] = MD.MaxDate
WHERE A.[TagName] = 'ERecipeRunning'
OR A.[TagName] = 'PRecipeRunning'
答案 1 :(得分:1)
这是我一直使用的简单版本。查看 SQL Fiddle
SELECT sh.[DateTime],
sh.[TagName],
sh.[Value]
FROM [v_StringHistory] sh
WHERE sh.[TagName] in( 'ERecipeRunning', 'PRecipeRunning' )
and sh.[DateTime] =(
select Max( [DateTime] )
from [v_StringHistory]
where [TagName] = sh.[TagName] );
答案 2 :(得分:1)
对于这个特殊的前端Wonderware,显然有一些关于如何查询其表的规则。幸运的是,他们有一个GUI,允许您选择并单击您想要查看的内容,然后它会吐出SQL代码。在这种情况下,代码最终成为:
SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = DateAdd(mi,-5,GetDate())
SET @EndDate = GetDate()
SET NOCOUNT OFF
SELECT * FROM (
SELECT History.TagName, DateTime = convert(nvarchar, DateTime, 21), Value, vValue, StartDateTime
FROM History
WHERE History.TagName IN ('ERecipeRunning', 'PRecipeRunning')
AND wwRetrievalMode = 'Cyclic'
AND wwCycleCount = 2
AND wwVersion = 'Latest'
AND DateTime >= @StartDate
AND DateTime <= @EndDate) temp WHERE temp.StartDateTime >= @StartDate
ORDER BY DateTime DESC
我忘记了Query应用程序及其提供的SQL代码。在我的狩猎和猜测中,我甚至没有选择相同的表/视图。但最终,这是有效的,我很好。感谢大家的建议。
答案 3 :(得分:0)
要选择具有最新日期时间值的条目,请按该列排序结果并选择前1:
SELECT TOP 1 <columns> FROM <table> WHERE <condition> ORDER BY [DateTime] DESC
我对第二个问题无能为力,但建议使用ADO.NET。