[英]How do I find a group of rows exclusively BETWEEN two dates in MySQL?
我必须找到一组具有共享密钥的结果,这些结果已发布到我的本地数据存储区的API中,且不得早于过去90天,但不得迟于过去7天。
这将是一个有效的组,我需要为其捕获1234:
account_id,company_id,posted_date
1234,A,2018-02-28
1234,B,2018-03-13
1234,C.2018-04-23
1234,D,2018-05-15
这将是一个无效的组。 如果单个日期不在查询的上限或下限之内,则应从最终结果中排除帐户ID:
account_id,company_id,posted_date
5678,Z,2018-02-01
5678,Y,2018-03-13
5678,X.2018-04-23
5678,W,2018-05-21
这是使用子查询的查询的初稿:
SELECT DISTINCT account_id, company_id FROM local_data_store.result_api
WHERE account_id NOT IN (
SELECT account_id FROM local_data_store.result_api
GROUP BY account_id
HAVING posted_date > DATE_SUB(NOW(), INTERVAL 7 DAY)
)
AND account_did IN (
SELECT account_did FROM local_data_store.result_api
GROUP BY account_did
HAVING posted_date > DATE_SUB(NOW(), INTERVAL 90 DAY)
)
GROUP BY account_id, company_id
LIMIT 100000;
这是我现在正在处理的查询,没有子查询(我尝试了联接,但它们实际上不起作用):
SELECT DISTINCT account_id, company_id,
COUNT(ra1.posted_date > DATE_SUB(NOW(), INTERVAL 90 DAY)) AS day90,
COUNT(ra1.posted_date > DATE_SUB(NOW(), INTERVAL 7 DAY)) as day7
FROM local_data_store.result_api ra1
GROUP BY posted_date, account_id;
但是它运行了很长时间,以至于数据库连接超时。 这仅在包含375,000行的数据库表上。
这是我想出的解决方案。 希望它可以帮助别人。
SELECT DISTINCT account_did, cb_company_id, COUNT(did) as `# of jobs`
FROM cb_local_data_store.job_search_result_api
WHERE account_did NOT IN (
SELECT account_did FROM cb_local_data_store.job_search_result_api
WHERE posted_date < DATE_SUB(NOW(), INTERVAL 60 DAY)
OR posted_date > DATE_SUB(NOW(), INTERVAL 4 DAY) )
GROUP BY account_did, cb_company_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.