Tsql 按日期选择值

Tsql 按日期选择值,tsql,sql-server-2012,Tsql,Sql Server 2012,我的数据结构与 ,但我需要获取每个日期的值,我标记了它们。Feroc问题的解决方案是只给出最后日期 localName Date_Time RH BAG012 2014-10-09 17:17:58.000 16 <-- BAG012 2014-10-09 17:13:28.000 16 BAG012 2014-10-09 17:12:23.000 16 BAG012 2014-10-09 16:5

我的数据结构与 ,但我需要获取每个日期的值,我标记了它们。Feroc问题的解决方案是只给出最后日期

localName Date_Time                 RH  
BAG012    2014-10-09 17:17:58.000   16  <--     
BAG012    2014-10-09 17:13:28.000   16  
BAG012    2014-10-09 17:12:23.000   16  
BAG012    2014-10-09 16:52:54.000   16  
BAG012    2014-10-08 05:14:56.000   16  <--         
BAG012    2014-10-08 04:45:31.000   16  
BAG012    2014-10-08 04:44:08.000   16  
SAG165    2014-10-28 11:22:14.000   698 <--         
SAG165    2014-10-28 11:09:14.000   698     
SAG165    2014-10-28 10:53:18.000   698     
SAG165    2014-10-27 19:30:14.000   693 <--         
SAG165    2014-10-27 19:14:51.000   693     
SAG165    2014-10-27 19:13:56.000   693
  • 因为datetime也包含时间,所以我尝试删除时间,只留下日期
  • 试图使用不同的日期和时间
  • 上述两种情况的结果均未发生任何变化

    答复: 谢谢大家,以下几点对我很有用:

    WITH CTE AS
    (
       SELECT localName, Date_Time, RH,
         RN = ROW_NUMBER() OVER (PARTITION BY localName, CAST(Date_Time AS date) ORDER BY Date_Time DESC)
       FROM dbo.TableName
    )
    SELECT localName, Date_Time, RH
    FROM CTE
    WHERE RN = 1
    ORDER BY localName, Date_Time;
    
    使用select distinct:

    SELECT DISTINCT date
    FROM table_name
    
    它会给你每个日期的日期

    SELECT DISTINCT localName, Date , RH
    FROM table_name
    

    这应该给出唯一的日期和相对湿度值以及相应的本地名称。

    按日期分组:

    SELECT localName, MAX(date_time) AS max_date_time, MAX(rh) AS max_rh
    FROM your_table
    GROUP BY localName, CAST(date_time AS date)
    
    这将为您提供每个localname的最后日期

    输出:

    localName  max_date_time           max_rh
    ---------- ----------------------- -----------
    BAG012     2014-10-08 05:14:56.000 16
    BAG012     2014-10-09 17:17:58.000 16
    SAG165     2014-10-27 19:30:14.000 693
    SAG165     2014-10-28 11:22:14.000 698
    

    这是可行的,但并不完全可行。对于RH值也发生变化的日期,重复此操作。本地名称最长日期时间RH BAG015 2014-09-15 23:59:32.000 190 BAG015 2014-09-16 23:59:59.000 190 BAG015 2014-09-17 11:36:59.000 190 BAG015 2014-10-09 18:22:15.000 335 BAG015 2014-10-09 19:23:55.000 336 BAG015 2014-10-09 20:10:12.000 337 BAG015 2014-10-09 21:04:22.000 338 BAG015 2014-10-09 23:14.000 339 BAG015 2014-10-10-1009:25:50.000 339 BAG015 2014-10-10 10:11:58.000 340 BAG015 2014-10-10 11:10:14.000 341 BAG015 2014-10-10 12:11:55.000 342 BAG015 2014-10-10 18:16:25.000 343我需要的是-获取每个日期的localName的最后值。如果RH的值不同,您的解决方案是为一个日期提供多个相同localName的输出。我只需要date的最后一个值我需要RH值,但需要date的最后一个值。如果有超过1个相对湿度值(这是不同的),我只需要最后一个。我想把你们的答案标记为“有用”,但我没有足够的声誉。谢谢你help@ADO_kg没关系。这两个答案都有效。不过我的应该会表现得更好。它为date提供了一个值,与我有多少不同的localName无关。这不是OP想要的。但是,是的,我在你的答案中看到OP的附加注释。这不是OP想要的。
    localName  max_date_time           max_rh
    ---------- ----------------------- -----------
    BAG012     2014-10-08 05:14:56.000 16
    BAG012     2014-10-09 17:17:58.000 16
    SAG165     2014-10-27 19:30:14.000 693
    SAG165     2014-10-28 11:22:14.000 698
    
    WITH CTE AS
    (
       SELECT localName, Date_Time, RH,
         RN = ROW_NUMBER() OVER (PARTITION BY localName, CAST(Date_Time AS date) ORDER BY Date_Time DESC)
       FROM dbo.TableName
    )
    SELECT localName, Date_Time, RH
    FROM CTE
    WHERE RN = 1
    ORDER BY localName, Date_Time;