我正在尝试为每个组类型、子类型、s_stype、category_id查找最近的日期。如果没有找到日期,请使用默认值:
样本数据:
| 类型|亚型|类型|类别ID|日期|
| - ------|- ------|- ------|- ------|- ------|
| 1个|1个|1个|二一一|两千万|
| 1个|1个|1个|二一一|三千万|
| 1个|1个|第二章|二一一|两千万|
| 1个|1个|第二章|二一一|两千万|
| 1个|1个|三个|二一一|零|
| 1个|1个|第二章|三一一|五亿|
| 1个|1个|第二章|三一一|四千万|
| 1个|1个|第二章|三一一|零|
质询:
Select *
from Table
where date <= input_date or date is null
group by Type, Subtype, s_stype, category_id
order by date desc
查询应针对每个类型、子类型、s_stype、类别采用较少的最近日期。
- 例如,给定
input_date = 25000000
**:
- 例如,给定
| 类型|亚型|类型|类别ID|日期|
| - ------|- ------|- ------|- ------|- ------|
| 1个|1个|1个|二一一|两千万|
| 1个|1个|第二章|二一一|两千万|
| 1个|1个|三个|二一一|零|
| 1个|1个|第二章|三一一|零|
查询应该给出上述结果,而不是给出错误行,即第一行满足给定组标准的where条件
由于我使用了mysql5.7,所以我需要解决方案,没有窗口函数的解决方案,如上述
1条答案
按热度按时间zfycwa2u1#
获得每组中最好的行意味着不存在该组中更好的行。而“更接近”意味着两个日期之差的绝对值更小。这就是我下面的查询的工作原理。
由于示例中的日期是整数,所以我在这里展示整数数学。如果您使用的是真实的日期,则必须使用
DATEDIFF
而不是减法,因为MySQL有一个缺陷,允许从一个日期减去另一个日期,但返回一些似乎没有意义的数字,而不是返回一个间隔或预定义单位(如日期)的值。