2016-12-15 2 views
2

У меня есть jsons, как показано нижеГруппировки с массивом в формате JSON с N1QL Couchbase

"Company|1000":{ 
    "_id": 1000, 
    "_type": "Company", 
    "transactions": [ 
    { 
     "amount": 96.9, 
     "date": "2016-10-11T18:30:00.000Z", 
    }, 
    { 
     "amount": 77.9, 
     "date": "2016-9-01T18:30:00.000Z", 
    } 
    ], 
} 

Я хочу все счета транзакций группы по месяцам и года Я пытаюсь сделать ниже запрос, но это из пут другой.

select ARRAY DATE_PART_MILLIS(STR_TO_MILLIS(x.date),'month') FOR x IN 
Company.transactions END m, 
    ARRAY DATE_PART_MILLIS(STR_TO_MILLIS(z.date),'year') FOR z IN 
Company.transactions END y, 
    count(CASE WHEN array_count(b) > 0 THEN array_count(b) ELSE 0 END) 
Deposits 
    from Inheritx Company 
    LET b = ARRAY TONUMBER(x.amount) FOR x in Company.transactions WHEN 
x.type IN [0] END 
    where Company._type="Company" 
    GROUP BY ARRAY DATE_PART_MILLIS(STR_TO_MILLIS(x.date),'month') FOR x IN 
Company.transactions END, 
    ARRAY DATE_PART_MILLIS(STR_TO_MILLIS(x.date),'year') FOR x IN 
Company.transactions END 

Я хочу, чтобы из положить как

y  m count 

2016  9  2 
2016  10 12 
2016  8  52 
+1

Вы должны использовать UNNEST и GROUP BY. – geraldss

+0

спасибо, что это работает –

+0

Пожалуйста, разместите свое решение здесь как ответ, чтобы другие могли его найти. Вы задали хороший вопрос! – geraldss

ответ

2

Я сделано ниже запроса

SELECT DATE_PART_MILLIS(STR_TO_MILLIS(newTransaction.date),'month') m, 
DATE_PART_MILLIS(STR_TO_MILLIS(newTransaction.date),'year') y, 
count(CASE WHEN newTransaction.transactionType IN [0] THEN 1 ELSE NULL END) 
Deposits 
FROM Inheritx Users 
join Inheritx Company on keys('Company|'|| TOSTRING(Users.company)) 
UNNEST Company.transactions as newTransaction 
WHERE Users._type='User' and DATE_PART_MILLIS(STR_TO_MILLIS(newTransaction.date),'year')=2016 
group by DATE_PART_MILLIS(STR_TO_MILLIS(newTransaction.date),'month') 
order by DATE_PART_MILLIS(STR_TO_MILLIS(newTransaction.date),'month') 
+0

Вы можете использовать DATE_PART_STR() вместо DATE_PART_MILLIS (MILLIS_TO_STR()). – geraldss

+0

Я сделал это, но и то, и другое –

Смежные вопросы