From 548990180de2de225045e9ec8d666e69b4ceaba8 Mon Sep 17 00:00:00 2001 From: zlt Date: Thu, 10 Sep 2026 09:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E8=AE=BA=E6=96=AD=E7=9A=84=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=A1=A5=E7=A1=AE=E5=AE=9A=E6=8E=92=E5=BA=8F=EF=BC=9A?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=9C=AC=E8=AF=A5=E6=98=AF=E5=8F=AF=E5=A4=8D?= =?UTF-8?q?=E7=8E=B0=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来这条查询没有 ORDER BY,而它的文档串写着「每票取最近披露日的最多三条」—— 代码却按数据库返回的天然顺序截前几条。没有排序时那个顺序不保证,于是同一个数据日、 同一份代码,相隔三十二秒的两次装配,候选卡与逻辑线有五处不一样。 实测证据:连续两次 collect,main.card 差 5 处、main.logic 差 5 处、card_rank 差 20 处、 顶层的候选单与关注名单也不一样。计划因此不可复现,下游也不知道自己拿的是哪一份。 按票、披露日倒序、论断编号三级排序。编号做次级排序是因为光按披露日排,同一天的多条 之间仍然没有定序。 Co-Authored-By: Claude Opus 5 --- sources.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources.py b/sources.py index 44c95be..89ff8ed 100644 --- a/sources.py +++ b/sources.py @@ -256,7 +256,8 @@ def logic_claims(codes, ds: str, per_stock: int | None = None, read_pg=None) -> marks = ",".join(["%s"] * len(dots)) rows = _records(reader( f"SELECT {', '.join(_LOGIC_COLS)} FROM v_factor_logic " - f"WHERE ts_code IN ({marks}) AND disclosure_date <= %s", + f"WHERE ts_code IN ({marks}) AND disclosure_date <= %s " + f"ORDER BY ts_code, disclosure_date DESC, claim_id", tuple(dots) + (ds,))) except Exception as e: # noqa: BLE001 print(f" (因果论断视图 v_factor_logic 读取失败,候选卡的论断证据线整体缺席: {e!r})")