-1

このステートメントを実行するたびにデータが挿入されないことを期待しています。1 日に 1 回だけ効果的にデータを挿入する必要があります。それが私がこれをしたいことです。ここで私の論理に何か問題がありますか? date(now())今日の日付を挿入するように使用しています。これをべき等挿入にする必要があります。

INSERT INTO newsletter_subscription_counts
          (query_date, community_id, mailing_list, subscription_count)
  SELECT date(now()), a.community_id, 
     a.newsletter_type::mail_list_types, 
     count(a.subscriber_user_id)
   FROM
      newsletter_subscribers_main a
   LEFT OUTER JOIN newsletter_subscription_counts b
   ON (a.community_id = b.community_id)
   AND (a.newsletter_type::mail_list_types = b.mailing_list)
   AND (a.created_at = b.query_date)
   WHERE b.query_date is null
   AND   b.mailing_list is null
GROUP BY a.community_id, a.newsletter_type, a.created_at
4

1 に答える 1

3
INSERT INTO newsletter_subscription_counts
      (query_date, community_id, newsletter_t, subscription_count)     
SELECT now()::date
      ,a.community_id
      ,a.newsletter_type
      ,count(*)
FROM   newsletter_subscribers_main a
LEFT   JOIN newsletter_subscription_counts b
                     ON  a.community_id = b.community_id
                     AND a.newsletter_type::mail_list_types = b.mailing_list
                     AND a.created_at = b.query_date
WHERE  a.created_at::date = now()::date
AND    b.query_date is null
GROUP  BY a.community_id, a.newsletter_type;

いくつかのノイズを削除し、フォーマットを改善し、最も重要なWHERE節を追加しました:

WHERE  a.created_at::date = now()::date

created_atが既に typeの場合date、キャストは必要ありません。

また、私がすでにあなたの問題を推測しているあなたの前の質問に対する私の答えを考慮してください:
複数の結合条件を持つ複雑なクエリを理解するのに助けが必要

ただ、そこにある私の推測では、まだ挿入されていないすべての日が処理されます(IMOが望ましいです)。

于 2013-06-17T16:51:28.883 に答える