2

当社の mysql データベースは、化合物の倉庫保管と四半期ごとの更新を処理します。私たちは、最新の四半期ごとのアップロードにあるユニークな化合物、つまりこれまでに見られたことのない化合物 (ChemID) を見つけることに関心があります。

同様の質問/解決策を掘り下げて見つけた日付範囲を使用して、以下のコードをいくつか試しましたが、アプリケーションで機能させることができませんでした。これは、NULL を返すか、バリエーションがタイムアウトした (ChemCaseReports の 13M 行のように動作する) 試行 1 です。

の最新 ImportDate(datetime タイプ) は「2012-06-12 05:58:16」であることに注意してください。

試行 1:

SELECT DISTINCT ChemID
FROM Chem_CaseReports a 
WHERE a.ImportDate = '2012-06-12 05:58:16'
AND NOT EXISTS
(
 SELECT * FROM Chem_CaseReports b 
 WHERE a.ChemID = b.ChemID
 AND b.ImportDate <= '2012-06-12 05:58:16'
)

サブクエリの * は、ChemID.a と .b の間のあいまいさを避けるために必要ですか? GROUP BY または HAVING 句を追加する必要がありますか、または最初の選択で GROUP_CONCAT のような集計引数を最初に指定します。

私は数学の学習障害を持っているので、問題は日付時刻で反転した gt、eq、または lt 記号と同じくらい簡単かもしれません。

ご協力いただきありがとうございます!

4

1 に答える 1

1

一見すると、変更する必要があるの<=<

理論的根拠

元のNOT EXISTS使用には、保持する必要のあるすべてのレコードが<= 含まれていました。

その後、ステートメントは次のようになります

SELECT DISTINCT ChemID
FROM Chem_CaseReports a 
WHERE a.ImportDate = '2012-06-12 05:58:16'
AND NOT EXISTS
(
 SELECT * FROM Chem_CaseReports b 
 WHERE a.ChemID = b.ChemID
 AND b.ImportDate < '2012-06-12 05:58:16'
)
于 2012-06-14T18:30:22.340 に答える