2016-10-07 7 views
0

主にカラム/データがJSONBタイプであるため、私は作成しようとしている複雑なPostgresクエリを持っています。私はAuth.statusvalid カラムタイプがJSONBのユニークなレコードを取得

  • UserIdあるすべてのレコード

    • を取得する必要があります

      Details.reference.card.number

    で重複を除くと1

  • であるここに私のテーブルです:

    +-----------------------+---------------------------------------------+--------+ 
    |   Auth   |     Details     | UserId | 
    +-----------------------+---------------------------------------------+--------+ 
    | {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} |  1 | 
    | {"status": "valid"} | {"reference": {"card": {"number": "3321"}}} |  1 | 
    | {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} |  1 | 
    | {"status": "Invalid"} | {"reference": {"card": {"number": "3331"}}} |  1 | 
    | {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} |  1 | 
    +-----------------------+---------------------------------------------+--------+ 
    

    上記このクエリは返す必要があります:

    +-----------------------+---------------------------------------------+--------+ 
    |   Auth   |     Details     | UserId | 
    +-----------------------+---------------------------------------------+--------+ 
    | {"status": "valid"} | {"reference": {"card": {"number": "4444"}}} |  1 | 
    | {"status": "valid"} | {"reference": {"card": {"number": "3321"}}} |  1 | 
    +-----------------------+---------------------------------------------+--------+ 
    

    私は今のところが何をしています。

    SELECT * FROM table 
    WHERE "Auth" @> '{"status": "valid"}' 
    AND "UserId" = 1 
    
  • 答えて

    0
    WITH sample_table AS (
        SELECT 
         "userId", 
         p."Auth"->>'status' as "authStatus", 
         p."Detail"->'"reference"'->'card'->>'number' as "referenceCardNumber", 
        FROM my_table p 
    ) 
    SELECT DISTINCT ON ("referenceCardNumber") "referenceCardNumber", * 
    FROM sample_table 
    WHERE "authStatus" = 'valid' 
    AND "userId" = 1 
    
    関連する問題