MySQL检查是否有任何行有 future 的日期

标签 mysql group-by

(已缩小以下架构以减少问题)

我有两个表 Products:

| ID         | ProductName       | AvailableDate (date)
|------------------------------------------------
| 1          | Foo               | 2011-01-01
| 2          | Bar               | 2017-01-01
| 3          | FooBar            | 2011-01-01

映射:

| ID         | ProductID       | SomeOtherID
|------------------------------------------------
| 1          | 1               | 1
| 2          | 2               | 1
| 3          | 3               | 2

一个映射可以指向n产品:

SELECT 
  GROUP_CONCAT(`Products`.ProductName SEPARATOR ', ')
FROM 
  Mappings
JOIN 
  Products ON Mappings.ProductID = Products.ID
GROUP BY 
  Mappings.SomeOtherID

我现在想扩展查询以检查 Products 中的任何行是否具有大于当前日期的可用日期 以发现组合的产品,即拥有至少一种“抢先体验”产品。

我尝试了以下方法

SELECT 
      GROUP_CONCAT(`Products`.ProductName SEPARATOR ', '),
      IF(COUNT(DATEDIFF(`Products`.AvailableDate, CURDATE)) > 0, 1, 0) As IsEarlyAccess
    FROM 
      Mappings
    JOIN 
      Products ON Mappings.ProductID = Products.ID
    GROUP BY 
      Mappings.SomeOtherID 

但我总是收到 IsEarlyAccess = 1。有什么提示吗?

最佳答案

我很想在 MAX 上使用 IF 而不是计算 IF:-

SELECT GROUP_CONCAT(Products.ProductName SEPARATOR ', '), IF(MAX(Products.AvailableDate) > CURDATE(), 1, 0) As IsEarlyAccess 
FROM Mappings 
JOIN Products ON Mappings.ProductID = Products.ID 
GROUP BY Mappings.SomeOtherID

关于MySQL检查是否有任何行有 future 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697777/

相关文章:

mysql - 新记录和多对多插入

mysql - linq lambda 复合键 where 和 group by

mysql - 获取 DBtable 上每个项目的总和并将其与另一个 DBtable 进行比较

php - MySQL 查询分组依据和位置

java 8 groupingBy,过滤字段大于平均值的记录

mysql - 如何使用 MySQL 获取取决于 id 的价格

php - 无法链接到 MySQL 数据库

r - 基于无序的三列聚合一个数据框

sql-server - 使用 Select 语句和聚合函数从另一个表更新表

mysql - 计算具有相同相关记录集的行数