私は以下のような状況があります:1ヶ月以内に1回の取引をカウントしてください
私は2つのデータベーステーブルを持っています。私がTB1と呼ぶ最初のテーブルには、顧客が&を信用したすべての給与と、取引が行われた日が含まれています。 私がTB2と呼ぶ2番目のテーブルには、クライアントが銀行に持っているすべての製品が含まれています。 私の目的は、顧客が私たちの銀行の商品(私の場合はオーバーラン)を受け取った日までに得た給与の数を見つけることです。 これまではすべて正常に動作し、必要なデータを抽出するためのクエリを作成しました。 唯一の問題は、クエリを改善する必要があることです。したがって、特定のクライアントが同じ年の同じ月に1つ以上の給与(たとえば15日ごと)を受け取った場合、給与は1回だけカウントされます。 どうすればいいですか?
問合せは、下記のようなものです:
SELECT TB1.customer_id, COUNT(TB1.customer_id)
FROM table_1 TB1
JOIN
(SELECT TB2.CUSTOMER_ID, TB2.OD_START_DATE
FROM table_2 TB2
JOIN table_2 TB2_MAX
ON TB2.CUSTOMER_ID = TB2_MAX.CUSTOMER_ID
HAVING TB2.od_start_date = MAX(TB2.od_start_date)
GROUP BY TB2.customer_id, TB2.od_start_date
) TB2
ON TB1.CUSTOMER_ID = TB2.CUSTOMER_ID
WHERE TB1.DATE_FROM < TB2.OD_START_DATE
GROUP BY TB1.CUSTOMER_ID
PS:OD_START_DATEフィールドは、最新の製品が開かれた日付が含まれていながら、DATE_FROMフィールドは、取引が行われた日付が含まれています。
ノエルは、私はあなたが言った正確な事をしなかったが、COUNT(DISTINCT TO_CHAR(TB1.DATE_FROM、「YYYYMM」)は)私の命を救っありがとう:) SO MUCHをありがとう – Marin
することができますしてください私にそれをする方法を教えてください?私は解決策に投票しました。 – Marin
答えの横の目盛りをクリックするだけです。 http://stackoverflow.com/help/someone-answers – Noel