从mysql表中获取当前未显示的日期详细信息

时间:2015-01-14 17:12:43

标签: php mysql

我有一个mysql表,每天都会加载生产数据。我需要一个列值(推荐),这些值在早期日期不存在,即currentdate -1

我尝试了各种查询:

1)

select distinct referral from time_in_report where crt_date=curdate() and referral not in(select distinct referral from time_in_report where crt_date<curdate())

以上查询是正确的,但是,由于该表具有大量数据,因此需要很长时间才能响应并且内存不足。所以我不能使用上面的查询

2)

select distinct referral from time_in_report a where a.crt_date=curdate() and not exist(select 1 from time_in_report b where a.id=b.id and b.crt_date<curdate())

在上面的查询中,ID列是表中的主键。由于一个引用可以具有不同的ID,因此上述查询结果不正确。我正在获得一些推荐,这些推荐在当前日期以外的日期存在。

  1. 从time_in_report a中选择不同的引荐,其中a.crt_date = curdate() 减去 从time_in_report a中选择不同的引用,其中a.crt_date

  2. 减号在我的mysql版本中不起作用。

    请提出您的想法,了解如何获得当前日期的明确推荐,除当前日期之外的其他日期不存在。

    先谢谢

2 个答案:

答案 0 :(得分:0)

您可以检查字段不等于当前日期而不是减去当前日期。

select distinct referral from time_in_report where crt_date=curdate() and referral not in(select distinct referral from time_in_report where crt_date!=curdate());

试试这个。

答案 1 :(得分:0)

mysql显示效率低下的原因是因为在设计过程中没有提供的表中缺少索引,而MySQL优化器因为派生表而没有生成有效的计划。

select distinct a.referral from time_in_report a left join time_in_report b
on
a.referal_basename=b.referal_basename where a.crt_date=curdate() and b.crt_date<curdate() 

上述查询可能有效,也可能无效,但您只需尝试即可。它是mysql中减去查询的替代方法,因为在mysql中不存在减运算符..这很奇怪,而且是真的。

如果您有大量数据,那么您应该拥有索引,这样就可以不使用查询来重新获取数据