2016-01-27 23 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挑战。你会介意投票答案吗?我很感激! –

相关问题