繁体   English   中英

MySQL查找并合并最接近日期范围的记录

MySQL find and combine records closest to date range

提示:本站收集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和里程表都不正确。

有什么建议么?

1 个回复

假设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 ,您将加入一个保证每辆车返回一条记录的子查询。

1 MySQL找到日期范围之间的任何记录

我正在建立简单的预订表格。 假设我要预订2015年7月12日至2015年7月21日之间的汽车。 在数据库中,我们有记录,从2015-07-15到2015-07-20有已预留的汽车(car_id 18)。 这是我的查询,以检查是否有保留车: 查询后,我得到记录,已经有预订车了 ...

2015-07-10 12:30:23 2 70   mysql
2 MYSQL-如何在日期范围内查找记录

我正在查看的表具有固定日期的列EnteredDateTime和AuditDateTime 。 我需要一些帮助来查找早于1天且少于7天的记录 我目前使用的代码是- EnteredDateTime BETWEEN DATE_ADD(AuditDateTime, INTERVAL 1 da ...

3 MYSQL选择最接近日期的记录

我的数据库中有以下2个表: PRODUCT_PRICE 产品的详细信息 我想找到在开始日期和结束日期之间价格已经降低的产品。 我现在正在使用以下查询,该查询有效: 但是问题是,如果价格未更改,则表product_price没有记录。 例如 sta ...

4 RavenDB:查找范围内的最近日期

我正在尝试查询最接近我传递给查询日期的文档。 问题是RavenDB无法翻译我的查询: InvalidOperationException:无法理解如何翻译Abs 这是我正在尝试的查询: 如果RavenDB无法翻译这些Math函数,还有什么其他选项可以编写这种类型的查询 ...

6 MySql查找最接近的日期以及之前和之后的日期

因此,我已经搜寻了互连网的凹处,但是我找不到是否有简便的方法可以做到这一点。 我在MySql(我知道)数据库中有杂志日期列表。 我需要能够找到最接近给定日期的日期(“ 1962-5-22”可能没有问题,因此我们需要数据库中最接近的日期)但同时要获取下一个日期和数据库中的PREVIOUS日 ...

7 MySQL-在数字范围内找到最接近的匹配项

我正在研究图形类型的应用程序,并且正在寻找在y,y轴起点到终点的最佳解决方案。 MySQL数据: 说我有以下内容:starting_x:200starting_y:150ending_x:500ending_y:605 因此,我想找到上述数字与数据库之间最接近的匹配项。 ...

2017-07-21 03:32:03 1 96   mysql/ sql
8 查找日期范围内的记录

我设置了search_start_date和search_end_date,然后我想找到属于这个时间范围的记录。 但是我没有得到任何回复使用下面的代码。 我应该改变什么来使这项工作? 编辑:我现在使用search_start_date = DateTime.new(2013, 1, ...

9 在日期范围之间查找记录

请看附件图片 替代文字http://img248.imageshack.us/img248/7743/datefrom.png 我有一个具有FromDate和ToDate的表。 FromDate是某个事件的开始,而ToDate是该事件的结束。 如果搜索条件在日期范围之间,我需要找 ...

10 MySQL查找日期范围

给定以下值YYYY-MM-DD 以及数据库中的以下记录,也是YYYY-MM-DD 如何选择$start $stop范围内的所有记录? 这应包括除最后一行和第一行以外的所有内容 尝试以下,获取记录2-4,但不记录5。 ...

2012-03-21 20:17:15 2 781   mysql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM