1

vehicle_Summary というテーブルがあり、データは次のように表示されます。

A_Date                         vehicle_Name        Location_Name
2012-02-08 09:36:20.000        AA000AA               Denver
2012-03-08 09:36:20.000        AA000AA               Tokyo
2012-04-08 09:30:50.000        AA000AA               Melbourne
2012-12-08 09:36:20.000        AA000AA               Geneva
2012-22-08 00:00:00.000        AA000AA               NY 

2012-01-08 09:36:20.000        DPT011                Hobart
2012-03-08 09:36:20.000        DPT011                Tasmania
2012-04-08 09:30:50.000        DPT011                Java
2012-12-08 09:36:20.000        DPT011                Manila
2012-22-08 00:00:00.000        DPT011                Singapore

そして、私は vehicle_Info テーブルを

vehicle_Name

DPT011
AA000AA
Z400

したがって、最初に vehicle_Info テーブルからすべての車両を検索し、 vehicle_Summary で白黒の 2 つの時間間隔を照会すると、2012-02-08 04:44:44.444 と 2012-12-08 09:44:44.444 と言う

私が期待するのは

vehicleName                     start_Point                   end_Point
AA000AA                         Denver                        Geneva
DPT011                          Tasmania                      Manila

MS Sql サーバー 2k5 を使用しています。C# で手動ロジックを実行する代わりに、これをクエリとして使用します。これは可能ですか

4

2 に答える 2

0

A_Date を と仮定すると、演算子をDatetime使用Betweenして次のような結果を得ることができます:-

WHERE A_Date Between '1/20/2009' And '2/21/2009'

またはこのようにしてみてください:-

WHERE startdate >= startdate AND enddate <=enddate
于 2013-03-16T11:24:21.030 に答える
0

あなたはこれを行うことができます:

WITH CTE
AS
(
  SELECT
    vehicle_name,
    MIN(A_Date) AS StartDate,
    MAX(A_Date) AS EndDate
  FROM vehicle_Summary
  WHERE A_Date BETWEEN '2012-08-02 04:44:44.444'
                   AND '2012-08-12 09:44:44.444'
  GROUP BY vehicle_name
)
SELECT 
  c.vehicle_name, 
  s.Location_name AS start_Point, 
  e.Location_name AS end_Point
FROM CTE AS c
INNER JOIN vehicle_summary s  ON s.vehicle_name = c.vehicle_name
                             AND s.A_Date       = c.StartDate 
INNER JOIN vehicle_summary e  ON e.vehicle_name = c.vehicle_name
                             AND e.A_Date       = c.EndDate; 

SQL フィドルのデモ

これにより、次のことが得られます。

| VEHICLE_NAME | START_POINT | END_POINT |
------------------------------------------
|      AA000AA |      Denver |    Geneva |
|       DPT011 |    Tasmania |    Manila |

更新 1

JOINまた、そこから車両名を取得する他のテーブルを使用することもできます。

WITH CTE
AS
(
  SELECT
    i.vehicle_id,
    i.vehicle_name,
    MIN(s.A_Date) AS StartDate,
    MAX(s.A_Date) AS EndDate
  FROM vehicle_Summary AS s
  INNER JOIN vehicle_Info AS i ON s.vehicle_id = i.vehicle_id
  WHERE s.A_Date BETWEEN '2012-08-02 04:44:44.444'
                   AND '2012-08-12 09:44:44.444'
  GROUP BY i.vehicle_id,
           i.vehicle_name
)
SELECT 
  c.vehicle_name, 
  s.Location_name AS start_Point, 
  e.Location_name AS end_Point
FROM CTE AS c
INNER JOIN vehicle_summary s  ON s.vehicle_id = c.vehicle_id
                             AND s.A_Date     = c.StartDate
INNER JOIN vehicle_summary e  ON e.A_Date     = c.EndDate
                             AND e.vehicle_id = c.vehicle_id;

更新された SQL Fiddle デモ

于 2013-03-16T11:40:36.893 に答える