2016-10-07 3 views
0

У меня сложный запрос Postgres, который я пытаюсь сделать, главным образом потому, что мои столбцы/данные находятся в типе JSONB.Получите уникальные записи, где тип столбца JSONB

мне нужно получить все записи

  • где Auth.status является valid
  • UserId является 1
  • Исключая дубликаты на Details.reference.card.number

Вот мой стол:

+-----------------------+---------------------------------------------+--------+ 
|   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 
Смежные вопросы