【问题标题】:How to query datetime column - MS SQL 2008如何查询日期时间列 - MS SQL 2008
【发布时间】:2017-10-15 04:32:33
【问题描述】:

我有一个表 (table1),其中包含每天存储多次的日期时间列。

例如:

select * from table1
+----+------+------+-----------------+
| id | col1 | col2 | datetime        |
+----+------+------+-----------------+
|  1 | A    | B    | 2016-01-01 16:50|
+----+------+------+-----------------+ 
|  2 | A    | B    | 2016-01-01 17:20|
+----+------+------+-----------------+ 
|  3 | A    | B    | 2016-01-02 19:50|
+----+------+------+-----------------+ 
|  4 | A    | B    | 2016-01-02 20:00|
+----+------+------+-----------------+ 

我需要的是一个查询或某种选择每天最长时间的解决方案。

想要的输出:

+----+------+------+-----------------+
| id | col1 | col2 | datetime        |
+----+------+------+-----------------+
|  2 | A    | B    | 2016-01-01 17:20|
+----+------+------+-----------------+ 
|  4 | A    | B    | 2016-01-02 20:00|
+----+------+------+-----------------+ 

【问题讨论】:

    标签: sql sql-server-2008 datetime greatest-n-per-group


    【解决方案1】:
    SELECT t.id, t.col1,t.col2, r.Maxdate
    FROM (
          SELECT id, MAX(datetime) as Maxdate
          FROM Yourtable
          GROUP BY id
    ) r
    INNER JOIN Yourtable t
    ON t.id = r.id AND t.datetime = r.Maxdate
    

    【讨论】:

      【解决方案2】:

      试试这个:

      declare @test table(id int,col1 varchar (10),col2 varchar(10),[datetime] datetime)
      
      
      insert into @test values (1,'A' , 'B'   ,'2016-01-01 16:50')
      insert into @test values (2,'A' , 'B'   ,'2016-01-01 17:20')
      insert into @test values (3,'A' , 'B'   ,'2016-01-02 19:50')
      insert into @test values (4,'A' , 'B'   ,'2016-01-02 20:00')
      
      select a.id,r.col1,r.col2,r.maxdate from
      (select col1,col2,max(datetime) as maxdate from @test group by col1,col2,day([datetime])) r
      inner join  @test a
      on r.col1=a.col1 and r.col2=a.col2 and r.maxdate=a.datetime
      

      【讨论】:

      • Inner join + group by 成功了,谢谢大家的贡献。
      【解决方案3】:

      您需要使用Group By 子句和SQL Join 来达到您想要的结果。

      SELECT tbl.*
      FROM Table tbl
      JOIN
        (SELECT col1,
                col2,
                max(colDateTime) AS DateTimeColumn
         FROM Table
         GROUP BY col1,
                  col2,
                  day(colDateTime)) groupTbl ON tbl.colDateTime = groupTbl.DateTimeColumn
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多