[英]sql query for displaying start/end points with time interval
I have a table called vehicle_Summary and the data loks like: 我有一个名为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
and i have vehicle_Info table as 我有vehicle_Info表作为
vehicle_Name
DPT011
AA000AA
Z400
So first i search all vehicles from vehicle_Info table and when i query b/w two time interval on vehicle_Summary say 2012-02-08 04:44:44.444 and 2012-12-08 09:44:44.444 所以首先我从Vehicle_Info表中搜索所有车辆,当我在Vehicle_Summary中查询两个时间间隔时,说2012-02-08 04:44:44.444和2012-12-08 09:44:44.444
wt i expect is 我期望的是
vehicleName start_Point end_Point
AA000AA Denver Geneva
DPT011 Tasmania Manila
im using MS Sql server 2k5 , i want this as query instead of performing the manual logic in C#. 我使用MS Sql服务器2k5,我希望将此作为查询,而不是在C#中执行手动逻辑。 is this possible 这可能吗
Assuming A_Date as Datetime
, you can use Between
operator to get your result something like this:- 假设A_Date为Datetime
,则可以使用Between
运算符来获得如下结果:
WHERE A_Date Between '1/20/2009' And '2/21/2009'
or try like this:- 或尝试这样:-
WHERE startdate >= startdate AND enddate <=enddate
You can do this: 你可以这样做:
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;
This will give you: 这将为您提供:
| VEHICLE_NAME | START_POINT | END_POINT |
------------------------------------------
| AA000AA | Denver | Geneva |
| DPT011 | Tasmania | Manila |
You can also, JOIN
the other table to get the vehicle name from there: 您还可以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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.