Mysql 从日期范围中选择不同的列值

Mysql 从日期范围中选择不同的列值,mysql,sql,Mysql,Sql,我创建了一个sqlfiddle,它概述了我要做的事情: 基本上,我需要在包含元信息的表中搜索唯一的帖子。在这个例子中,meta是一系列表示排除的日期(想想酒店的预订系统) 我传递一个开始和结束日期。我想查找不包含该范围内日期的post_id。我很接近,但还不太清楚 SELECT DISTINCT post_id FROM wp_facetwp_index WHERE facet_name = 'date_range' AND facet_value NOT BETWEEN '$start_d

我创建了一个sqlfiddle,它概述了我要做的事情:

基本上,我需要在包含元信息的表中搜索唯一的帖子。在这个例子中,meta是一系列表示排除的日期(想想酒店的预订系统)

我传递一个开始和结束日期。我想查找不包含该范围内日期的post_id。我很接近,但还不太清楚

SELECT DISTINCT post_id 
FROM wp_facetwp_index
WHERE facet_name = 'date_range'
AND facet_value NOT BETWEEN '$start_date' AND '$end_date'
如果表中唯一排除的日期在该范围内,则此操作有效,但如果某些日期超出该范围,则仍会获得post_id


感谢您的关注。

不要忘记,在SQL中,过滤器(where子句等)是基于记录应用的。每个记录都独立于其他记录进行评估

那么,自从

(1511,“日期范围”、“cf/排除日期”、“2015-07-31”、“2015-07-31”)

验证您的条件,返回
511

由于
post\u id
不是唯一的,因此您需要对集合进行排除,而不是现在对记录进行排除

这是解决方案(这里调整了fiddle:)

紧跟在
之后的子查询存在(
是行的子集。它将根据连接
i2.post\u id
=
i1.post\u id
NOT EXISTS
进行负面评估。 这是一个负交点


如果您需要标识的元组不是唯一的,则排除记录的工作将不起作用。

我删除了wordpress标记并添加了SQL标记,因为此查询实际上是一个一般的SQL问题。非常感谢!我现在正在测试此问题。我将在确认此问题后尽快接受此答案。
SELECT DISTINCT i1.`post_id` 
FROM `wp_facetwp_index` i1
WHERE i1.`facet_name` = 'date_range'
AND NOT EXISTS (
    SELECT 1
    FROM `wp_facetwp_index` i2
    WHERE 
        i2.`facet_value` BETWEEN '$start_date' AND '$end_date'
    AND i2.`facet_name` = 'date_range'
    AND i2.`post_id` = i1.`post_id`
)