簡體   English   中英

如何在MySQL中兩個日期之間找到一組行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM