You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何查询爬取日期非今日及从未被爬取的公司数据?

问题根源

你原有SQL仅能匹配到已存在爬取记录且上次爬取日期非今日的公司,没有覆盖「从未有过爬取记录」的逻辑,因此无法返回MCSFT对应的记录。

修正方案

方案1:LEFT JOIN 写法(兼容性最强,适配所有主流数据库)

通过左连接关联两张表,直接判断两种符合重爬要求的场景即可:

SELECT c.*
FROM companies c
LEFT JOIN Crawl_Settings cs 
  ON c.Symbol = cs.Symbol 
  AND c.Exchange = cs.Exchange
WHERE 
  -- 场景1:无任何爬取记录
  cs.Symbol IS NULL
  -- 场景2:有爬取记录但上次爬取不是今日
  OR DATE(cs.`Last crawl date`) != CURDATE();

注意:日期函数可根据你使用的数据库调整:MySQL用CURDATE(),SQL Server用CAST(GETDATE() AS DATE),Oracle用TRUNC(SYSDATE)。如果你的Last crawl date字段仅存储日期不含时分秒,可以去掉外层的DATE()转换。

方案2:IN 组合写法(逻辑更直观)

SELECT * FROM companies
WHERE 
  -- 场景1:从未有过爬取记录
  (Symbol, Exchange) NOT IN (SELECT Symbol, Exchange FROM Crawl_Settings)
  -- 场景2:有爬取记录但上次爬取非今日
  OR (Symbol, Exchange) IN (
    SELECT Symbol, Exchange 
    FROM Crawl_Settings 
    WHERE DATE(`Last crawl date`) != CURDATE()
  );

注意事项

  • 必须同时匹配Symbol和Exchange两个联合主键字段,避免出现不同交易所同代码公司的匹配错误
  • 日期比较前尽量统一格式,避免因字段带时分秒导致判断偏差

内容的提问来源于stack exchange,提问作者Bouji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:24:03