Mysql 选择日期之前存在n-1行的n行
我正在尝试创建一个MySQL查询,其中它将选择最新的4行(按Mysql 选择日期之前存在n-1行的n行,mysql,select,Mysql,Select,我正在尝试创建一个MySQL查询,其中它将选择最新的4行(按dateDESC,Y-m-d格式排序),其中最新的date在date\ux之后,至少在date\ux+1之前存在3行。例如,考虑以下记录: ----------------------- | id | date | | 1 | 2018-01-01 | | 6 | 2018-01-02 | | 10 | 2018-01-03 | | 26 | 2018-01-04 | | 27
date
DESC,Y-m-d格式排序),其中最新的date
在date\ux
之后,至少在date\ux+1
之前存在3行。例如,考虑以下记录:
-----------------------
| id | date |
| 1 | 2018-01-01 |
| 6 | 2018-01-02 |
| 10 | 2018-01-03 |
| 26 | 2018-01-04 |
| 27 | 2018-01-05 |
| 34 | 2018-01-06 |
| 60 | 2018-01-07 |
-----------------------
如果date\u x
=“0000-00-00”,则应返回:
-----------------------
| id | date |
| 1 | 2018-01-01 |
| 6 | 2018-01-02 |
| 10 | 2018-01-03 |
| 26 | 2018-01-04 |
-----------------------
-----------------------
| id | date |
| 27 | 2018-01-02 |
| 34 | 2018-01-03 |
| 60 | 2018-01-04 |
| 27 | 2018-01-05 |
-----------------------
-----------------------
| id | date |
-----------------------
如果date\u x
=“2018-01-04”,则应返回:
-----------------------
| id | date |
| 1 | 2018-01-01 |
| 6 | 2018-01-02 |
| 10 | 2018-01-03 |
| 26 | 2018-01-04 |
-----------------------
-----------------------
| id | date |
| 27 | 2018-01-02 |
| 34 | 2018-01-03 |
| 60 | 2018-01-04 |
| 27 | 2018-01-05 |
-----------------------
-----------------------
| id | date |
-----------------------
如果date\u x
=“2018-01-07”,则应返回:
-----------------------
| id | date |
| 1 | 2018-01-01 |
| 6 | 2018-01-02 |
| 10 | 2018-01-03 |
| 26 | 2018-01-04 |
-----------------------
-----------------------
| id | date |
| 27 | 2018-01-02 |
| 34 | 2018-01-03 |
| 60 | 2018-01-04 |
| 27 | 2018-01-05 |
-----------------------
-----------------------
| id | date |
-----------------------
有什么方法可以通过一个查询有效地实现这一点吗?我认为这就是您试图实现的要点:
select t.*
from t
where date >= @date and
(select count(*) from t t2 where t2.date >= @date) >= 3
order by date
limit 4;
你的问题和样本数据相当混乱。您可以说order by
date desc
,但示例结果似乎首先有最小的日期。您提到了x_date+1
,但结果中没有提到这一点。我认为以上内容正是您想要的。演示为日期提供值'2018-01-04'
获取“date\u x+1
”之前的行数。(我们可以将其与文字值进行比较,以确定是否至少有3行。)
获取(最多)四个最新的行
SELECT t.id
, t.date
FROM mytable t
ORDER BY t.date DESC
LIMIT 4
综上所述,我们可以这样做
SELECT t.id
, t.date
FROM mytable t
WHERE 2 < ( SELECT COUNT(1) AS cnt
FROM mytable d
WHERE d.date < '2018-01-04' + INTERVAL 1 DAY
)
AND 0 < ( SELECT COUNT(1) AS cnt
FROM mytable c
WHERE c.date > '2018-01-04' + INTERVAL 0 DAY
)
ORDER BY t.date DESC
LIMIT 4
规格不完全清楚。。。如果少于四行怎么办?如果有多行的日期>日期x+1怎么办
我怀疑还有更多的规格,我没有赶上。规范说我们希望“最新日期”在日期之后。。。不清楚我们是否应该只返回
date\u x
之后的第一个日期,而忽略后面的日期。您确定它是按date desc
排序的吗?格式是Y-m-d,很抱歉,这在原始帖子中不清楚。我已经编辑过了,“日期x+1”是什么?“在日期之后”将建议日期=2018-01-04,结果将不包括在此之前的日期。如果date\ux='0000-00-00'
date\ux+1是什么?我看不出你是如何获得投票结果的,因为你需要描述一下你已经尝试/思考了什么,以及你在哪里陷入了困境。可能需要反转一些条件,因为与OP desire输出不匹配,并且需要一个大于日期的条件