【问题标题】:sql query for counting distance travelled用于计算行驶距离的sql查询
【发布时间】:2013-03-16 14:54:11
【问题描述】:

我有一个类似车辆和位置的表格

time   |  odo
_______
4:00   |   10

5:00   |   20

6:00   |  30

7:00   |  60

8:00   |  80

我有另一个表格,其中列出了上表中存在时间/odo 的车辆 所以我需要从vehicleList_table 中挑选一辆车,然后在上表中加入。

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

说starttime 4:00 和endtime 7:00:

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

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

【问题讨论】:

  • 请在编辑帖子时查看预览。您刚刚破坏了其他用户的编辑。请看Markdown help
  • 是的,这就是我给你降价帮助链接的原因。

标签: c# sql


【解决方案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 Fiddle Demo


更新:

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

JOIN 两个表,并添加一个WHERE 子句,这将为您提供每辆车的starttime、EndTime 和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;

Updated SQL Fiddle Demo

这会给你类似的东西:

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

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

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

【讨论】:

  • @downvoter :请添加评论以进行投票。解决方案对我来说似乎是正确的。
  • @Mahmoud Gamal 你的超级快手!!!如果我在 b/w 中有时间间隔,比如 5:00 和 7:00,可能时间 >= 5:00 和
  • @user1944477 你想这样做更多的时间间隔?请在这种情况下使用您正在寻找的预期结果集更新您的问题。您使用的是什么 RDBMS,SQL Server、MySQL 还是什么?
  • @Mahmoud 有没有办法从另一个表中获取车辆名称并有一个(时间(开始和结束)和车辆名称 =(从 vehInfo_tab 中选择不同的 vehName)猜我是否需要加入
  • @user1944477 这就是我的查询所做的,车辆名称来自vehiclelist_table,时间来自位置表,如果您愿意,您还可以加入更多表。随时使用表格结构和所需的输出再次更新您的问题/
【解决方案2】:

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

Select @Starttime startTime,@Endtime Endtime,Max(odo)-Min(odo)
From YourTable
Where time Between @Starttime And @Endtime

【讨论】:

  • :能否请您替换查询中的值?我的理解是在 where 子句中我们必须写出这样的值(' Where time between '4:00' And '8:00')。所以在选择它将如何识别@starttime和@endtime。
  • 我不认为“'4:00'和'8:00'之间的时间”在这里可以有静态时间。 Starttime 和 Endtime 将是应该传递给查询以计算距离的时间范围。
  • 所以,如果您能提供带有值的查询,这样我就可以了解新的东西,那就太好了。
  • @ken 是的,因为在子句之间将日期时间作为变量,是否可以传递值,例如(其中时间 >= '2012-06-18 04:00:00 AM' 和时间
【解决方案3】:
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;

【讨论】:

  • 如何在没有 group by 的情况下获取车辆名称以及聚合函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多