如何查询日期时间列 - 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的主要内容,如果未能解决你的问题,请参考以下文章