我有一个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,因此上述查询结果不正确。我正在获得一些推荐,这些推荐在当前日期以外的日期存在。
从time_in_report a中选择不同的引荐,其中a.crt_date = curdate() 减去 从time_in_report a中选择不同的引用,其中a.crt_date
减号在我的mysql版本中不起作用。
请提出您的想法,了解如何获得当前日期的明确推荐,除当前日期之外的其他日期不存在。
先谢谢
答案 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中不存在减运算符..这很奇怪,而且是真的。
如果您有大量数据,那么您应该拥有索引,这样就可以不使用查询来重新获取数据