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