C# 时间和不同列之间的sql查询
我的车桌看起来像C# 时间和不同列之间的sql查询,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,我的车桌看起来像 vehNo tTime odo ABC 2013-02-13 10:30:00 80 ABC 2013-02-12 10:30:00 10 ABC 2013-02-12 12:30:00 30 ABC 2013-02-13 01:30:00 40 ABC 2013-02-13 02:30:
vehNo tTime odo
ABC 2013-02-13 10:30:00 80
ABC 2013-02-12 10:30:00 10
ABC 2013-02-12 12:30:00 30
ABC 2013-02-13 01:30:00 40
ABC 2013-02-13 02:30:00 40
ABC 2013-02-13 03:30:00 40
XYZ 2013-02-13 03:33:00 44
ABC 2013-02-13 04:30:00 60
ABC 2013-02-13 11:30:00 100
我可以给出2013-02-12 10:30:00和2013-02-13 10:30:00之间的时间(按时间排序),但我如何获得不同的odo
ABC 2013-02-12 10:30:00 10
ABC 2013-02-12 12:30:00 30
ABC 2013-02-13 03:30:00 40 (time being latest, ignoring 1:30 & 2:30)
ABC 2013-02-13 04:30:00 60
ABC 2013-02-13 10:30:00 80
我在MSSql server 2005上运行我想您可能希望按odo分组并选择最大值(tTime)。这听起来正确吗?SQL Server 2005已经支持
公共表表达式和窗口功能。借助于ROW_NUMBER()
,它通过指定记录的顺序对组中的记录进行排序
WITH latestDate
AS
(
SELECT vehNo, tTime, odo,
ROW_NUMBER() OVER (PARTITION BY vehNo, odo
ORDER BY tTime DESC) rn
FROM tableName
)
SELECT vehNo, tTime, odo
FROM latestDate
WHERE rn = 1
显然,对于介于“2013-02-12 10:30:00和2013-02-13 10:30:00”之间的语句,可以在中间添加where
子句:
select vehNo, max(tTime) as [tTime], odo
from vehicles
where tTime between @start and @end
group by vehNo, odo
order by vehNo, odo
像这样尝试
select vehNo, max(tTime) as tTime, odo
from myTable
group by vehNo, odo
order by vehNo, odo
这是。ok with@mark我将我的解决方案扩展为
select vehNo, max(tTime) as [tTime], odo
from Table_1
where vehNo = 'ABC' and tTime between '2013-02-12 10:30:00' and '2013-02-13 10:30:00'
group by vehNo, odo
order by vehNo, odo
快到了,但是在tTime之间呢?你说的在时间之间是什么意思?这不是说max(tTime)很复杂吗
一组吗?@marcGravel我同意你的看法:D
,但如果表上还有其他列,这会有所帮助。如果我只选择“ABC”,好的,从vehNo='ABC'的位置得到,并且开始和结束之间的时间是rit吗?
select vehNo, max(tTime) as tTime, odo
from myTable
group by vehNo, odo
order by vehNo, odo
| VEHNO | TTIME | ODO |
-------------------------------------
| ABC | 2013-02-12 10:30:00 | 10 |
| ABC | 2013-02-12 12:30:00 | 30 |
| ABC | 2013-02-13 03:30:00 | 40 |
| ABC | 2013-02-13 04:30:00 | 60 |
| ABC | 2013-02-13 10:30:00 | 80 |
| ABC | 2013-02-13 11:30:00 | 100 |
select vehNo, max(tTime) as [tTime], odo
from Table_1
where vehNo = 'ABC' and tTime between '2013-02-12 10:30:00' and '2013-02-13 10:30:00'
group by vehNo, odo
order by vehNo, odo