2016-01-27 43 views
3

在MySQL中,我想查找特定日期後列值爲0的所有行。MySQL:如果在日期後達到特定值,則獲取所有行

所以,給出的數據:

cat value  date 
a  95  2015-09-01 
a  78  2015-10-01 
a  0   2015-11-01 
a  0   2015-12-01 
b  129  2015-09-01 
b  230  2015-10-01 
b  201  2015-11-01 
b  140  2015-12-01 

在這種情況下,我想運行,要求查詢:

哪些品類有2015年10月1日之後0值,並有2015年11月1日前的正值?

結果應顯示類別「a」。

我懷疑是一個嵌套的select語句,但還沒有弄明白。

回答

2
select * from yourTable where value = 0 and date > '2015-10-01' and cat in (
    select distinct cat where value > 0 and date < '2015-11-1' 
) 

說明:您可以將查詢兩個部分 - 與中陳述負責獲取貓ID的15年11月1日之前呈陽性的內部查詢,以及where value = 0 and date > '2015-10-01'會給你的,是經過0 15年10月1日

+0

就像一個魅力。我遇到了一個小問題。我有一個連接的字段,我正在投射日期。所以,WHERE子句並沒有把這個作爲我的日期。我確定有一個更優雅的解決方法,但是,我只是在該字段中添加了一個新的日期列,並更新了記錄以獲得實際的日期值。以前,我只有一年和一個月。 (不是我的原始數據庫!) – stockwet

0

建設關什麼尼爾利維說,如果你只是想返回的類別,你可以cat只選擇不同的值:

SELECT DISTINCT cat 
FROM stack_test.your_table 
WHERE value = 0 AND date > '2015-10-01' AND 
cat IN (SELECT cat FROM stack_test.mysql_rows WHERE value > 0 AND date < '2015-11-01'); 
+0

此解決方案的+1。原來解決了這個問題的一大塊。我喜歡這樣做,只需要我不需要所有重複信息的記錄。萬分感謝!偉大的附加解決方案。 – stockwet

+0

謝謝!我喜歡這些類型的SQL挑戰。你會介意投票答案嗎?我很感激! –

相關問題