tableTime:
ID Time in Time out Vehicle Type
1 10:30 11:20 bike
2 10:40 12:30 car
table_charges:
Id Vehicle Type Rate
1 bike 50
2 Car 100
帮助我编写一个查询,通过应用与车辆类型相关的费率,在两个单独的列中返回总持续时间和成本。
答案 0 :(得分:0)
对于持续时间,您可以先将[Time in]
和[Time out]
转换为DateTime
,然后只需减去
DATEDIFF(hour, cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) )
最终查询是:
SELECT
t1.id, t1.[Time in], t1.[Time out], t1.[Vehicle Type]
, cast('2013-01-01 ' + t1.[Time IN] as datetime) as tin
, cast('2013-01-01 ' + t1.[Time out] as datetime) as tout
, DATEDIFF(hour, cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) )
as Duration
, (DATEDIFF(hour, cast('2013-01-01 ' + t1.[Time in] as datetime), cast('2013-01-01 ' + t1.[Time out] as datetime) ) ) *
( select rate from t2 where t2.[Vehicle Type] = t1.[Vehicle Type] )
as Charge
FROM t1
这是 SQL Fiddle
答案 1 :(得分:0)
为您提供 SQL FIDDLE EXAMPLE 。
您也可以用同样的方式提问。我认为这可以帮助你收取更多的钱,因为1分钟的额外费用将被视为额外的一小时.....
select A.id,
Time_in,
Time_out,
A.Vehicle_type,
CEILING(DATEDIFF(Minute, Time_in, Time_out)/60.0) as Park_Duration_Hours,
B.Rate * CEILING(DATEDIFF(Minute, Time_in, Time_out)/60.0) as TotalCharge
from TableTime A
left join TableCharges B
on A.Vehicle_Type = B.Vehicle_Type