如何从 couchbase 中获取缺失值列名
How to get missing value column name from couchbase
我是 运行 查询,它没有当前日期值,我已经尝试使用 ifmissing() 函数来获取列名,但在某些情况下它不起作用,我不知道原因。
我的查询是:
SELECT SPLIT(DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,‘hour'),‘T') [0],
ADD (TONUMBER(SPLIT(SPLIT (ev.auditDetail.createTime, 'T')[1], ‘:')[0]),7) AS HOUR,
COUNT (*) AS COUNT
FROM data_KH ev
WHERE type_ = ‘user’
AND DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,‘.')[0],7,‘hour’) >
CLOCK_TZ (‘Asia/Bangkok', '1111-11-11‘)
AND SPLIT (loginId,‘@‘)[1] NOT IN [‘yopmail.com', ‘ymail.com', ‘accoliteindia.com']
GROUP BY SPLIT (DATE_ADD_STR(SPLIT(ev. auditDetail.createTime,'.')[0],7,'hour'),‘T‘) [0],
ADD (TONUMBER (SPLIT (SPLIT (ev.auditDetail.createTime, ‘T')[1], ‘:')[0]),7)
ORDER BY SPLIT (DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,'hour'),‘T') [0],
ADD (TONUMBER (SPLIT (SPLIT (ev. auditDetail.createTime, 'T')[1], ':')[0]),7)
我修改了主查询有子查询,如果在主查询中找不到结果则创建静态结果
SELECT [{'':split (DATE_ADD_STR(SPLIT(clock_utc(),'.')[0],7,hour),'T')[0], COUNT':0,
HOUR' : add(TONUMBER(SPLIT (clock_utc('11:11:11'), ':')[0],7)}] AS ‘alterData’,
(SELECT SPLIT(DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,‘hour'),‘T') [0],
ADD (TONUMBER(SPLIT(SPLIT (ev.auditDetail.createTime, 'T')[1], ‘:')[0]),7) AS HOUR,
COUNT (*) AS COUNT
FROM data_KH ev
WHERE type_ = ‘user’
AND DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,‘.')[0],7,‘hour’) >
CLOCK_TZ (‘Asia/Bangkok', '1111-11-11‘)
AND SPLIT (loginId,‘@‘)[1] NOT IN [‘yopmail.com', ‘ymail.com', ‘accoliteindia.com']
GROUP BY SPLIT (DATE_ADD_STR(SPLIT(ev. auditDetail.createTime,'.')[0],7,'hour'),‘T‘) [0],
ADD (TONUMBER (SPLIT (SPLIT (ev.auditDetail.createTime, ‘T')[1], ‘:')[0]),7)
ORDER BY SPLIT (DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,'hour'),‘T') [0],
ADD (TONUMBER (SPLIT (SPLIT (ev. auditDetail.createTime, 'T')[1], ':')[0]),7)) AS ‘data’
子查询结果为ARRAY,如果没有结果则长度为0(不是MISSING)。
子查询结果有 EXIST/NOT EXIST。因为您也需要结果并且不想重复查询两次。您也可以使用以下方法。
CB 6.5 或以上
WITH result AS (SELECT DATE_FORMAT_STR(crdate, "2020-01-01") AS date,
DATE_PART_STR(crdate, "hour") AS hour,
COUNT (1) AS count
FROM data_KH AS ev
LET crdate = DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0], 7, "hour")
WHERE type_ = "user"
AND crdate > CLOCK_TZ ("Asia/Bangkok", "1111-11-11")
AND SPLIT (loginId,"@")[1] NOT IN ["yopmail.com", "ymail.com", "accoliteindia.com"]
GROUP BY DATE_FORMAT_STR(crdate, "2020-01-01"), DATE_PART_STR(crdate, "hour"))
SELECT d.*
FROM (CASE WHEN ARRAY_LENGTH(result) > 0 THEN result ELSE [{"date": CLOCK_TZ("Asia/Bangkok","2020-01-01"),
"hour":DATE_PART_STR(CLOCK_TZ("Asia/Bangkok"), "hour"),
"count":0}]
END) AS d
ORDER BY d.date, d.hour;
CB 6.50 之前
SELECT d.*
FROM ARRAY_FLATTEN ((SELECT RAW CASE WHEN ARRAY_LENGTH(result) > 0
THEN result
ELSE [{"date": CLOCK_TZ("Asia/Bangkok","2020-01-01"),
"hour":DATE_PART_STR(CLOCK_TZ("Asia/Bangkok"), "hour"),
"count":0}]
END
LET result = (SELECT DATE_FORMAT_STR(crdate, "2020-01-01") AS date,
DATE_PART_STR(crdate, "hour") AS hour,
COUNT (1) AS count
FROM data_KH AS ev
LET crdate = DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0], 7, "hour")
WHERE type_ = "user"
AND crdate > CLOCK_TZ ("Asia/Bangkok", "1111-11-11")
AND SPLIT (loginId,"@")[1] NOT IN ["yopmail.com", "ymail.com", "accoliteindia.com"]
GROUP BY DATE_FORMAT_STR(crdate, "2020-01-01"), DATE_PART_STR(crdate, "hour"))),1) AS d
ORDER BY d.date, d.hour;
您也可以使用 STR_TO_TZ(ev.auditDetail.createTime,"Asia/Bangkok") 代替 DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0 ], 7, "小时") https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datefun.html
我是 运行 查询,它没有当前日期值,我已经尝试使用 ifmissing() 函数来获取列名,但在某些情况下它不起作用,我不知道原因。
我的查询是:
SELECT SPLIT(DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,‘hour'),‘T') [0],
ADD (TONUMBER(SPLIT(SPLIT (ev.auditDetail.createTime, 'T')[1], ‘:')[0]),7) AS HOUR,
COUNT (*) AS COUNT
FROM data_KH ev
WHERE type_ = ‘user’
AND DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,‘.')[0],7,‘hour’) >
CLOCK_TZ (‘Asia/Bangkok', '1111-11-11‘)
AND SPLIT (loginId,‘@‘)[1] NOT IN [‘yopmail.com', ‘ymail.com', ‘accoliteindia.com']
GROUP BY SPLIT (DATE_ADD_STR(SPLIT(ev. auditDetail.createTime,'.')[0],7,'hour'),‘T‘) [0],
ADD (TONUMBER (SPLIT (SPLIT (ev.auditDetail.createTime, ‘T')[1], ‘:')[0]),7)
ORDER BY SPLIT (DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,'hour'),‘T') [0],
ADD (TONUMBER (SPLIT (SPLIT (ev. auditDetail.createTime, 'T')[1], ':')[0]),7)
我修改了主查询有子查询,如果在主查询中找不到结果则创建静态结果
SELECT [{'':split (DATE_ADD_STR(SPLIT(clock_utc(),'.')[0],7,hour),'T')[0], COUNT':0,
HOUR' : add(TONUMBER(SPLIT (clock_utc('11:11:11'), ':')[0],7)}] AS ‘alterData’,
(SELECT SPLIT(DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,‘hour'),‘T') [0],
ADD (TONUMBER(SPLIT(SPLIT (ev.auditDetail.createTime, 'T')[1], ‘:')[0]),7) AS HOUR,
COUNT (*) AS COUNT
FROM data_KH ev
WHERE type_ = ‘user’
AND DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,‘.')[0],7,‘hour’) >
CLOCK_TZ (‘Asia/Bangkok', '1111-11-11‘)
AND SPLIT (loginId,‘@‘)[1] NOT IN [‘yopmail.com', ‘ymail.com', ‘accoliteindia.com']
GROUP BY SPLIT (DATE_ADD_STR(SPLIT(ev. auditDetail.createTime,'.')[0],7,'hour'),‘T‘) [0],
ADD (TONUMBER (SPLIT (SPLIT (ev.auditDetail.createTime, ‘T')[1], ‘:')[0]),7)
ORDER BY SPLIT (DATE_ADD_STR(SPLIT (ev. auditDetail.createTime,'.')[0],7,'hour'),‘T') [0],
ADD (TONUMBER (SPLIT (SPLIT (ev. auditDetail.createTime, 'T')[1], ':')[0]),7)) AS ‘data’
子查询结果为ARRAY,如果没有结果则长度为0(不是MISSING)。 子查询结果有 EXIST/NOT EXIST。因为您也需要结果并且不想重复查询两次。您也可以使用以下方法。
CB 6.5 或以上
WITH result AS (SELECT DATE_FORMAT_STR(crdate, "2020-01-01") AS date,
DATE_PART_STR(crdate, "hour") AS hour,
COUNT (1) AS count
FROM data_KH AS ev
LET crdate = DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0], 7, "hour")
WHERE type_ = "user"
AND crdate > CLOCK_TZ ("Asia/Bangkok", "1111-11-11")
AND SPLIT (loginId,"@")[1] NOT IN ["yopmail.com", "ymail.com", "accoliteindia.com"]
GROUP BY DATE_FORMAT_STR(crdate, "2020-01-01"), DATE_PART_STR(crdate, "hour"))
SELECT d.*
FROM (CASE WHEN ARRAY_LENGTH(result) > 0 THEN result ELSE [{"date": CLOCK_TZ("Asia/Bangkok","2020-01-01"),
"hour":DATE_PART_STR(CLOCK_TZ("Asia/Bangkok"), "hour"),
"count":0}]
END) AS d
ORDER BY d.date, d.hour;
CB 6.50 之前
SELECT d.*
FROM ARRAY_FLATTEN ((SELECT RAW CASE WHEN ARRAY_LENGTH(result) > 0
THEN result
ELSE [{"date": CLOCK_TZ("Asia/Bangkok","2020-01-01"),
"hour":DATE_PART_STR(CLOCK_TZ("Asia/Bangkok"), "hour"),
"count":0}]
END
LET result = (SELECT DATE_FORMAT_STR(crdate, "2020-01-01") AS date,
DATE_PART_STR(crdate, "hour") AS hour,
COUNT (1) AS count
FROM data_KH AS ev
LET crdate = DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0], 7, "hour")
WHERE type_ = "user"
AND crdate > CLOCK_TZ ("Asia/Bangkok", "1111-11-11")
AND SPLIT (loginId,"@")[1] NOT IN ["yopmail.com", "ymail.com", "accoliteindia.com"]
GROUP BY DATE_FORMAT_STR(crdate, "2020-01-01"), DATE_PART_STR(crdate, "hour"))),1) AS d
ORDER BY d.date, d.hour;
您也可以使用 STR_TO_TZ(ev.auditDetail.createTime,"Asia/Bangkok") 代替 DATE_ADD_STR(SPLIT(ev.auditDetail.createTime, ".")[0 ], 7, "小时") https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datefun.html