查询以获取不为空且不匹配字符串的最新构建说明

Posted

技术标签:

【中文标题】查询以获取不为空且不匹配字符串的最新构建说明【英文标题】:Query to get the latest build notes which is not null and doesnt match a string 【发布时间】:2017-06-21 04:28:33 【问题描述】:

我正在尝试从具有以下条件的数据库表“build_wiki_notes_meta”中获取 build_notes,我正在使用以下查询,它没有给出任何输出,谁能提供有关如何解决此问题的指导?出了什么问题?有更好的查询(更快)吗?

1.MAX date_created

2.匹配给定的software_product_id

3.build_notes 不是null

4.build_notes 不匹配Currently no notes for this build

查询:

select
    meta_name,
    build_notes
from
(
    select meta_name, MAX(date_created) AS date_created, build_notes
    from build_wiki_notes_meta
    where software_product_id = 105
    order by date_created desc
) as tmp 
where (tmp.build_notes is NOT null) AND
      (tmp.build_notes NOT LIKE '%Currently no notes for this build%')

数据库表:-

【问题讨论】:

【参考方案1】:

您当前的查询有几个问题,除了下面给出的内容之外,我也想不出一个很好的方式来表达您的查询。您希望根据多个条件定位特定的记录组。除了这些条件之外,您还希望记录具有最新的创建日期。请注意,两条或多条记录之间可能存在最晚日期的平局。下面的查询只是使用WHERE 子句中的子查询来检查最新日期。

SELECT
    meta_name,
    build_notes
FROM build_wiki_notes_meta
WHERE
    software_product_id = 105 AND
    build_notes IS NOT NULL   AND
    build_notes NOT LIKE '%Currently no notes for this build%' AND
    date_created = (SELECT MAX(date_created) FROM build_wiki_notes_meta
                    WHERE software_product_id = 105 AND
                          build_notes IS NOT NULL   AND
                          build_notes NOT LIKE '%Currently no notes for this build%')

如果您确定只有一条最新记录和/或您不介意总是返回一条记录,那么我们可以将其简化为以下内容:

SELECT
    meta_name,
    build_notes
FROM build_wiki_notes_meta
WHERE
    software_product_id = 105 AND
    build_notes IS NOT NULL   AND
    build_notes NOT LIKE '%Currently no notes for this build%'
ORDER BY date_created DESC
LIMIT 1

【讨论】:

以上是关于查询以获取不为空且不匹配字符串的最新构建说明的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis中关于字符串字段的判断不为空且不为null

Laravel/Eloquent/DB 查询 - 当为空且不为空时加入

对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比

$_FILES 为空且不包含任何数据 [重复]

检查字段是否存在并且不为空

HSQLDB 结果集 - 如何获取没有引号的 HSQLDB 返回空间作为空格且不为空?