【问题标题】:Group by with Array in json with N1QL Couchbase使用 N1QL Couchbase 在 json 中使用 Array 分组
【发布时间】:2016-12-15 13:58:29
【问题描述】:

我有像下面这样的 json

"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

【问题讨论】:

  • 你需要使用 UNNEST 和 GROUP BY。
  • 请在此处发布您的解决方案作为答案,以便其他人可以找到它。你问了一个好问题!
  • @geraldss 请帮我解决这个问题question

标签: couchbase n1ql


【解决方案1】:

我已通过以下查询完成

    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')

【讨论】:

  • 您可以使用 DATE_PART_STR() 代替 DATE_PART_MILLIS(MILLIS_TO_STR())。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多