MySQL:如果在日期之后达到特定值,则获取所有行

Posted

技术标签:

【中文标题】MySQL:如果在日期之后达到特定值,则获取所有行【英文标题】:MySQL: Get all rows if specific value reached after date 【发布时间】:2016-05-05 03:00:30 【问题描述】:

mysql 中,我想查找在特定日期之后列的值变为 0 的所有行。

所以,给定数据:

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 语句,但还没有完全弄清楚。

【问题讨论】:

【参考方案1】:
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'
)

说明:您可以将查询拆分为两部分 - 带有 in 语句的内部查询负责获取在 2015 年 11 月 1 日之前为正的猫 ID,where value = 0 and date &gt; '2015-10-01' 将为您提供那些2015 年 10 月 1 日之后为 0

【讨论】:

像魅力一样工作。我遇到了一个小问题。我有一个连接字段,我将其转换为日期。因此,WHERE 子句无法使用它作为我的日期。我确信有一个更优雅的解决方法,但是,我只是在字段中添加了一个新的日期列并更新了记录以具有真实的日期值。以前,我只有一年和一个月。 (不是我原来的数据库!)【参考方案2】:

根据 Nir ​​Levy 所说,如果您只想返回类别,则可以只为 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');

【讨论】:

这个解决方案+1。原版解决了很大一部分问题。我喜欢这样在没有所有重复信息的情况下获得我需要的记录。万分感谢!很棒的附加解决方案。 谢谢!我喜欢这类 SQL 挑战。你介意投票给答案吗?我很感激!

以上是关于MySQL:如果在日期之后达到特定值,则获取所有行的主要内容,如果未能解决你的问题,请参考以下文章

如果 JSON 列中存在值(user_id),则获取 mysql 行

如何从props传递对象获取默认日期为特定日期

选择运行总计,直到达到特定 SUM

根据特定条件查找重复值

对于特定的日期时间,在 [关闭] 之前和之后查找日期时间最近的记录

MS SQL - 在特定行之前/之后获取