3

車両用の私のテーブルは次のようになります

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 (時間順) の間に与えることができますが、どうすれば DISTINCT 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サーバー2005で実行しています

4

6 に答える 6

2
select vehNo, max(tTime) as [tTime], odo
from vehicles
group by vehNo, odo
order by vehNo, odo

明らかに、「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
于 2013-03-28T11:47:10.273 に答える
1

SQL Server 2005 では、 と が既にサポートCommon Table ExpressionされていますWindow Function。これを使用して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-03-28T11:46:10.007 に答える
1

このようにしてみてください。

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 |

ここにありSQL Fiddle DEMOます。

于 2013-03-28T11:50:20.303 に答える
1

わかりました @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
于 2013-03-28T12:05:07.890 に答える
0

おそらく GROUP BY odo を使用して MAX(tTime) を選択する必要があると思います。そうですか?

于 2013-03-28T11:46:07.720 に答える
0
SELECT
  vehNO, 
  MAX(tTime) AS tTime,
  MAX(odo) AS odo
FROM vehicle
WHERE ...
GROUP BY ...
于 2013-03-28T11:46:32.653 に答える