SQL仅显示最新的DateTime值

时间:2015-03-26 13:37:05

标签: sql sql-server-2008

我的sql字符串关闭了一点点,我需要帮助才能完全正确。我尝试过很多没有运气的字符串。 I've tried most of the examples in this thread, with no luck.关于sql,这里只是结果的截图:

enter image description here

我希望它只显示PRecipeRunning和ERecipeRunning的最新DateTime的值。

I have setup a SQLFiddle here, with the schema and the grab everything code.

[编辑,将我的两个分手分成两个单独的问题。这是sql问题,我将为Visual Studio部分做另一个。]

4 个答案:

答案 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。