0

我有一张用于车辆和位置的表格

time   |  odo
_______
4:00   |   10

5:00   |   20

6:00   |  30

7:00   |  60

8:00   |  80

我有另一个表,其中列出了上表中将存在时间/odo 的车辆,因此我需要从中选择一辆车vehicleList_table并在上表中进行一些连接。

vehicleList_table因此,如果我从开始时间和开始时间查询每辆车,我希望得到以下结果:

starttime4:00 和endtime7:00:

___
vehicle  |  startTime  |  endTime  |  distanceTravelled
____
MH01k11   4:00        |     7:00     |      50   (i.e 60-10)
___

这是 wt 我需要我的数据集,因为我想在 gridview 中显示上述输出是否可以为上述内容编写查询,或者我是否需要依赖 c# 代码,我已经从通过它检索到的记录进行手动计算复杂的加载到gridview

4

3 回答 3

1

您可以使用单个查询简单地执行此操作:

SELECT
  MIN(time)           AS StartTime,
  MAX(time)           AS EndTime,
  MAX(odo) - MIN(odo) AS distanceTravelled
FROM tablename
WHERE time BETWEEN '4:00' 
               AND '8:00';

SQL 小提琴演示


更新:

对于更新您的问题后您正在寻找的输出:

JOIN这两个表,并添加一个WHERE子句,这将为您提供starttimeEndTime并且distanceTravelled对于每辆车,都有一个GROUP BY

SELECT
  v.vehicle,
  MIN(l.time) AS StartTime,
  MAX(l.time) AS EndTime,
  MAX(l.odo) - MIN(l.odo) AS travelled
FROM vehiclelist_table AS v
INNER JOIN locations as l ON v.vehicle_id = l.vehicle_id
WHERE l.time BETWEEN '4:00' AND '7:00'
GROUP BY v.vehicle;

更新的 SQL Fiddle 演示

这会给你类似的东西:

| VEHICLE | STARTTIME | ENDTIME | TRAVELLED |
---------------------------------------------
| MH01k11 |      4:00 |    7:00 |        50 |
| MHooooo |      4:00 |    7:00 |        50 |

如果您只需要为特定车辆执行此操作,请在WHERE条款中添加。

我还假设了列名和表关系,因为您没有提供它们之间的关系,您可能需要修复列名。

于 2013-03-16T06:24:10.083 回答
0

如果你想计算@Starttime 和@Endtime 之间的距离,那么你可以这样做:

Select @Starttime startTime,@Endtime Endtime,Max(odo)-Min(odo)
From YourTable
Where time Between @Starttime And @Endtime
于 2013-03-16T06:32:39.593 回答
0
SELECT
  vt.vehiclename as VehicleName
  MIN(ot.time)           AS StartTime,
  MAX(ot.time)           AS EndTime,
  MAX(ot.odo) - MIN(ot.odo) AS distanceTravelled
FROM vehicleTable vt, othertable ot
where vt.vehicleid=ot.vehicleid 
ot.time between time1 and time2
group by vt.vehiclename;
于 2013-03-16T06:46:21.780 回答