谁昨天没有报告? mysql不在列表中

Posted

技术标签:

【中文标题】谁昨天没有报告? mysql不在列表中【英文标题】:Who did not report yesteray? mysql not in list 【发布时间】:2014-09-16 19:55:04 【问题描述】:

我有一个必须每天提交数据的医院列表 (FacilityID_UUID) (date = create_date)。

在某一天,我想确定哪一天没有在前一天报告。

从这里开始:

SELECT `FacilityID_UUID`
FROM `TEST`
where `FacilityID_UUID` not in (
  SELECT distinct `FacilityID_UUID`
  FROM `TEST`
  where `Create_Date` = '2014-09-16'
)

(将日期替换为 sysdate,或间隔 1 天)

但是,我有两个问题:

1- 太慢了!现在已经跑了 30 分钟,我预计不会超过 20 个结果)。我怎样才能让它更快?

2- 它只为我提供过去至少提交一次但不是昨天提交的医院名称。如果更多的医院在周三开始提交,我希望周四的查询能够解决这个问题。基本上,我想说“把昨天没有提交的清单 X 上的医院给我”,然后我自己写清单 X。

任何想法

【问题讨论】:

类似左外连接的方法可能比输入快。然后只需找到左表中某个字段为空的所有结果。同样从较小的桌子开始可能是提高速度的好方法, “TEST”相关表? (如果需要并且可能需要更正,这似乎很奇怪。)full 模式定义和 FacilityID_UUID 的多重性是什么? “创建日期”与“提交日期”有何关系? 【参考方案1】:

您可以执行 LEFT JOIN 来获取到此日期已报告或未报告的每个测试,然后在第二个表中仅保留空值以仅查看在指定日期未报告的测试。

SELECT FacilityID_UUID
FROM TEST
LEFT JOIN TEST AS REPORT_DATE_TEST ON TEST.FacilityID_UUID = REPORT_DATE_TEST.FacilityID_UUID
AND REPORT_DATE_TEST.Create_Date = '2014-09-16
WHERE REPORT_DATE_TEST.FacilityID_UUID IS NULL;

上一个查询将给出与您的查询相同的结果,但速度更快。

但我怀疑您可能希望每个 UUID 只有一行,在这种情况下会是

SELECT DISTINCT FacilityID_UUID
FROM TEST
LEFT JOIN TEST AS REPORT_DATE_TEST ON TEST.FacilityID_UUID = REPORT_DATE_TEST.FacilityID_UUID
AND REPORT_DATE_TEST.Create_Date = '2014-09-16
WHERE REPORT_DATE_TEST.FacilityID_UUID IS NULL;

【讨论】:

【参考方案2】:

查询速度取决于很多因素,您将能够比这里的任何人更好地调整它。让我们看看您的数据和查询。

SELECT FacilityID_UUID FROM TEST where FacilityID_UUID not in 
         (SELECT distinct FacilityID_UUID FROM TEST where Create_Date = '2014-09-16')

此查询正在检查 TEST 的每一行并返回那些不在具有 Create_Date 的设施列表中的值。这肯定会很慢。对于 N 个项目,您要与可能相当大的 N 的某个子集进行比较。如果 TEST 是一个大表(如果每个设施每天都有一个新条目,那么它将是),那么您将遇到速度问题。

更好的查询是:

Select FacilityID_UUID, max(Create_Date) from TEST where Create_Date < CURDATE() - 1
                 group by FacilityID_UUID order by FacilityID_UUID;

对于您的数据,这应该接近正确(可能需要修改 where 子句,我在 mysql 中没有对日期做很多工作)。

【讨论】:

以上是关于谁昨天没有报告? mysql不在列表中的主要内容,如果未能解决你的问题,请参考以下文章

在 Cognos 10 中报告准备就绪时触发的可靠事件

如何在 Flutter 中报告静默崩溃

MS Access - VBA 中报告的参数

在 ASP.Net 中报告 - 代码还是转换?

sharepoint 中报告服务集成模式中的列表视图阈值

在多个表中报告层次结构