简体   繁体   English

MySQL - 如何选择最小/最大日期差异超过3年的id

[英]MySQL - how to select id where min/max dates difference is more than 3 years

I have a table like this: 我有这样一张桌子:

| id |           date     |        user_id         |
----------------------------------------------------
| 1  |     2008-01-01     |          10            |
| 2  |     2009-03-20     |          15            |
| 3  |     2008-06-11     |          10            |
| 4  |     2009-01-21     |          15            |
| 5  |     2010-01-01     |          10            |
| 6  |     2011-06-01     |          10            |
| 7  |     2012-01-01     |          10            |
| 8  |     2008-05-01     |          15            |

I'm looking for a solution how to select user_id where the difference between MIN and MAX dates is more than 3 yrs. 我正在寻找一个解决方案如何选择user_id,其中MIN和MAX日期之间的差异超过3年。 For the above data I should get: 对于上述数据,我应该得到:

|      user_id        |
-----------------------
|         10          |

Anyone can help? 有人可以帮忙吗?

SELECT   user_id 
FROM     mytable 
GROUP BY user_id
HAVING   MAX(`date`) > (MIN(`date`) + INTERVAL '3' YEAR);

Tested here: http://sqlize.com/MC0618Yg58 在这里测试: http//sqlize.com/MC0618Yg58

Similar to bernie's approach, I'd keep date formats native. 与bernie的方法类似,我会将日期格式保留为原生。 I'd also probably list the MAX first as to avoid an ABS call (secure a positive number is always returned). 我也可能首先列出MAX以避免ABS调用(确保始终返回肯定的正数)。

SELECT   user_id
FROM     my_table
WHERE    DATEDIFF(MAX(date),MIN(date)) > 365

DATEDIFF just returns delta (in days) between two given date fields. DATEDIFF只返回两个给定日期字段之间的增量(以天为单位)。

SELECT user_id
 FROM (SELECT user_id, MIN(date) m0, MAX(date) m1
       FROM table
       GROUP by user_id)
HAVING EXTRACT(YEAR FROM m1) - EXTRACT(YEAR FROM m0) > 3
SELECT A.USER_ID FROM TABLE AS A
JOIN TABLE AS B 
ON A.USER_ID = B.USER_ID
WHERE DATEDIFF(A.DATE,B.DATE) > 365

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

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