如何查询日期时间列 - MS SQL 2008

Posted

技术标签:

【中文标题】如何查询日期时间列 - MS SQL 2008【英文标题】:How to query datetime column - 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|
+----+------+------+-----------------+ 

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何查询日期时间列 - MS SQL 2008的主要内容,如果未能解决你的问题,请参考以下文章

ms-sql 如何查询开始时间与结束时间之间的数据?

如何在 SQL 中显示两个给定日期之间的所有日期

SQL计算年龄

如何从 MS SQL 表中具有 MM/DD/YYYY 日期的单个列中减去

如何在SQL中按时间段查询数据

如何使用 sql 查询使用注册日期列搜索网格视图