我正在建立简单的预订表格。 假设我要预订2015年7月12日至2015年7月21日之间的汽车。 在数据库中,我们有记录,从2015-07-15到2015-07-20有已预留的汽车(car_id 18)。 这是我的查询,以检查是否有保留车: 查询后,我得到记录,已经有预订车了 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
在这个令人尴尬的小时数中,我在这里读过类似的帖子,但找不到能回答这个问题的帖子。
拥有与此类似的表格[ID为PK /自动,日期为日期字段]
ID, Date, Vehicle, Odometer
1, 1/7/14, A16, 55512
2, 1/9/14, A16, 55600
3, 1/10/14, A16, 55600
4, 1/29/14, A16, 56213
5, 1/4/14, A17, 99512
6, 1/12/14, A17, 99600
7, 1/16/14, A17, 99600
8, 1/22/14, A17, 99213
我想创建一个查询(最终将是一个存储的proc),在其中我传入两个日期参数“ from”和“ to”,并返回一个按车辆分组的列表,例如(使用1/1/14和1 / 31/14作为日期参数):
Vehicle, From_ID, From_Date, From_Odometer, To_ID, To_Date, To_Odometer
A16, 1, 1/7/14, 55512, 4, 1/29/14, 56213
A17, 5, 1/4/14, 99512, 8, 1/22/14, 99213
尝试使用DATEDIFF和MAX结合Date <=来组合查询,子查询,视图的多种组合,但没有按照我的需要排列数据。
例如:
select
table.ID
, max(table.`Date`) as TheDate
, table.Odometer
FROM table
where table.Odometer > 0
and table.`Date`<= str_to_date('2/1/14','%m/%d/%Y');
试图获取我需要的一部分,但会产生正确的日期,但ID和里程表都不正确。
有什么建议么?
假设Date实际上是日期类型,并且ID是自动递增的主键,并且在进行里程表检查的日期输入了数据(因此您可以推断出ID越早,日期和里程表就越早阅读),那么这应该工作:
SELECT
from_to.Vehicle,
from_table.ID AS From_ID,
from_table.Date AS From_Date,
from_table.Odometer AS From_Odometer,
to_table.ID AS To_ID,
to_table.Date AS To_Date,
to_table.Odometer AS To_Odometer
FROM (
SELECT
vehicle,
MIN(ID) AS From_ID,
MAX(ID) AS To_ID
FROM
`table`
WHERE
Date BETWEEN '2014-01-01' AND '2014-01-31'
GROUP BY 1
) from_to
INNER JOIN `table` from_table
ON from_table.ID = from_to.From_ID
INNER JOIN `table` to_table
ON to_table.ID = from_to.To_ID
如果不能假定ID以升序表示记录,则可以提取Odometer的MIN和MAX值,然后将其用于from_table和to_table。 请注意,如果您拥有相同里程表读数的同一辆汽车的两条记录,则会遇到这种麻烦。 要解决的SQL会更大; 而不是为您的from_table和to_table加入table
,您将加入一个保证每辆车返回一条记录的子查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.