1

私は、(クエリ内で作成された)列「alpha_ssc_key」に基づいてテーブルから重複を除外しようとしています。しかし、このクエリを実行すると、単に "alpha_ssc_key"が重複している行を削除するのではなく、すべての結果が返されます。どんな助けでも大歓迎です!BigQuery内の標準SQLでDISTINCTを使用して重複を削除しました

これはBigQueryで実行されています。

WITH ssc_test_view AS (
    SELECT 
    DISTINCT CONCAT(CAST(date AS STRING), ciq_id, CAST(quantity AS STRING), CAST(cost_basis AS STRING),fund,security,class,inv_type,share_type) AS alpha_ssc_key, 
    _metadata_created_at AS file_date, 
    realized_gain_loss, 
    cusip, 
    acq_txn_no, 
    acquisition_date, 
    security, 
    company, 
    ticker, 
    ciq_id, 
    class, 
    inv_type, 
    dis_txn_no, 
    quantity, 
    categorization, 
    transaction_type, 
    cost_basis, 
    share_type, 
    fund, 
    net_proceeds, 
    unit_cost 
    FROM 
    `fcm-dw.acquisition_ssc.ssc_log`) 
SELECT 
    * 
FROM 
    ssc_test_view 

答えて

0

を - まだすべての行が返されている理由である - だけでなく、あなたの鍵に。あなたのケースでは、複合キーからフィールドをグループ化する方が良いが、実際の重複のロジックを決定する必要があります。以下の例では、MINが使用されています。しかし、あなたは

#standardSQL 
WITH ssc_test_view AS (
    SELECT 
    date, 
    ciq_id, 
    quantity, 
    cost_basis, 
    fund, 
    security, 
    class, 
    inv_type, 
    share_type, 
    MIN(_metadata_created_at) AS file_date, 
    MIN(realized_gain_loss) AS realized_gain_loss, 
    MIN(cusip) AS cusip, 
    MIN(acq_txn_no) AS acq_txn_no, 
    MIN(acquisition_date) AS acquisition_date, 
    MIN(company) AS company, 
    MIN(ticker) AS ticker, 
    MIN(dis_txn_no) AS dis_txn_no, 
    MIN(categorization) AS categorization, 
    MIN(transaction_type) AS transaction_type, 
    MIN(net_proceeds) AS net_proceeds, 
    MIN(unit_cost) AS unit_cost, 
    FROM `fcm-dw.acquisition_ssc.ssc_log` 
    GROUP BY 
    date, 
    ciq_id, 
    quantity, 
    cost_basis, 
    fund, 
    security, 
    class, 
    inv_type, 
    share_type) 
SELECT * FROM ssc_test_view 
+0

この場合、min関数とは何ですか?ちょうど最初のインスタンスを取る? –

+0

それぞれのフィールドには最小値が必要です。私が言及したように - あなたは任意の捨て去り論理を使うことができます - しかし、あなたはグループ化リストの外にあるそれらのフィールドのためにただ一つの値を選択する必要があります –

+0

私はMIN()のような集約論理を残すことができました。これらの記録に基づいて雑草を刈り取ったのでしょうか?上記のキーが、このデータセットを重複除外するために使用したいフィールドであるとします。重複除外のためにそのキーで何を使用すべきですか? –

0

このお試しください:ALL列に適用DISTINCT

SELECT stv.* 
FROM (SELECT stv.*, 
      ROW_NUMBER() OVER (PARTITION BY alpha_ssc_key ORDER BY _metadata_created_at DESC) as seqnum 
     FROM ssc_test_view stv 
    ) stv 
WHERE seqnum = 1; 
+0

STVは何ですか。*の代表の下に試してみてください、あなたのニーズ

に収まる任意の集計関数を使用することができますか?またはここでロジックに関するいくつかの洞察を私に与えることができます –

+0

@DaveChappelle。 。 。 'stv'はテーブルエイリアスであり、正しく定義されていません。 –

関連する問題