【发布时间】:2019-06-10 14:14:52
【问题描述】:
CREATE TABLE public.temp_test (
"part_number" character varying(255),
"service" character varying(255),
"label" text,
"value" double precision
);
INSERT INTO public.temp_test ("part_number", "service", "label", "value") VALUES ('ABCDSC', 'type1', '2019-05-13', 1100) ,('ABCDSC', 'type1', '2019-05-14', 1500) ,('ABCDSC', 'type1', '2019-05-15', 1300) ,('ABCDE', 'type1', '2019-05-16', 1300) ,('ABCDSC', 'type1', '2019-05-17', 1400) ,('ABCDSC', 'type1', '2019-05-18', 1400) ,('ABCDSC', 'type1', '2019-05-19', 800) ,('ABCDSC', 'type1', '2019-05-20', 1257) ,('ABCDSC', 'type1', '2019-05-21', 1100) ,('ABCDSC', 'type1', '2019-05-22', 1200) ,('ABCDSC', 'type1', '2019-05-23', 2860) ,('ABCDSC', 'type1', '2019-05-27', 1634) ,('ABCDSC', 'type1', '2019-06-06', 396) ,('QWERTY', 'type2', '2019-05-13', 200) ,('QWERTY', 'type2', '2019-05-14', 100) ,('QWERTY', 'type2', '2019-05-15', 300) ,('QWERTY', 'type2', '2019-05-16', 100) ,('QWERTY', 'type2', '2019-05-17', 100) ,('QWERTY', 'type2', '2019-05-18', 100) ,('QWERTY', 'type2', '2019-05-19', 100) ,('QWERTY', 'type2', '2019-05-20', 107) ,('QWERTY', 'type2', '2019-05-21', 200) ,('QWERTY', 'type2', '2019-05-22', 100) ,('QWERTY', 'type2', '2019-05-23', 280) ,('QWERTY', 'type2', '2019-05-27', 160) ,('QWERTY', 'type2', '2019-06-06', 3659);
这是我进入temp_test的数据
-- part_number | service | label | value
-- -------------+ ------- +------------+-------------
-- ABCDSC | type1 | 2019-05-13 | 1100
-- ABCDSC | type1 | 2019-05-14 | 1500
-- ABCDSC | type1 | 2019-05-15 | 1300
-- ABCDSC | type1 | 2019-05-16 | 1300
-- ABCDSC | type1 | 2019-05-17 | 1400
-- ABCDSC | type1 | 2019-05-18 | 1400
-- ABCDSC | type1 | 2019-05-19 | 800
-- ABCDSC | type1 | 2019-05-20 | 1257
-- ABCDSC | type1 | 2019-05-21 | 1100
-- ABCDSC | type1 | 2019-05-22 | 1200
-- ABCDSC | type1 | 2019-05-23 | 2860
-- ABCDSC | type1 | 2019-05-27 | 1634
-- ABCDSC | type1 | 2019-06-06 | 396
-- QWERTY | type2 | 2019-05-13 | 200
-- QWERTY | type2 | 2019-05-14 | 100
-- QWERTY | type2 | 2019-05-15 | 300
-- QWERTY | type2 | 2019-05-16 | 100
-- QWERTY | type2 | 2019-05-17 | 100
-- QWERTY | type2 | 2019-05-18 | 100
-- QWERTY | type2 | 2019-05-19 | 100
-- QWERTY | type2 | 2019-05-20 | 107
-- QWERTY | type2 | 2019-05-21 | 200
-- QWERTY | type2 | 2019-05-22 | 100
-- QWERTY | type2 | 2019-05-23 | 280
-- QWERTY | type2 | 2019-05-27 | 160
-- QWERTY | type2 | 2019-06-06 | 3659
但在 PSQL 函数中,我需要将其分配给两个键 DailyPart1Usage 和 DailyPart2Usage
CREATE TYPE DATA AS(
"DailyPart1Usage" JSONB,
"DailyPart2Usage" JSONB
);
DROP FUNCTION IF EXISTS "GetData"(INTEGER,BIGINT,TEXT,JSON,TEXT,TEXT,TEXT);
CREATE OR REPLACE FUNCTION "GetData"()
RETURNS DATA AS $$
DECLARE
daily_part_data JSON;
-- May be need 1 more data type here to distinguish between DailyPart1Usage, DailyPart2Usage.
BEGIN
SELECT
array_to_json(array_agg(row_to_json(sq1))) INTO daily_part_data
FROM (
SELECT
"value",
"label"
FROM
temp_test
) AS sq1;
RETURN account_dash_data;
END;
$$ LANGUAGE plpgsql;
现在只有daily_part_data 包含所有部件类型数据
[{"label":"2019-05-13","value":1100},{"label":"2019-05-14","value":1500},{"label":"2019-05-15","value":1300},{"label":"2019-05-16","value":1300},{"label":"2019-05-17","value":1400},{"label":"2019-05-18","value":1400},{"label":"2019-05-19","value":800},{"label":"2019-05-20","value":1257},{"label":"2019-05-21","value":1100},{"label":"2019-05-22","value":1200},{"label":"2019-05-23","value":2860},{"label":"2019-05-27","value":1634},{"label":"2019-06-06","value":396}]
我需要以下数据结构:
我尝试使用 CASE 构建 JSON 数据,但无法插入到 DATA。
-- Expected Result in `DailyPart1Usage`, `DailyPart2Usage`
"DailyPart1Usage": { --- Relatod to Part1: ABCDSC
"ChartData": [
{
"value": 10,
"label": "2019-05-07"
},
{
"value": 20,
"label": "2019-05-06"
}
....
]
},
"DailyPart2Usage": { --- Relatod to Part2: QWERTY
"ChartData": [
{
"value": 100,
"label": "2019-05-07"
},
{
"value": 129,
"label": "2019-05-06"
}
....
]
}
注意:只有 2 部分类型将在那里。
【问题讨论】:
标签: sql postgresql stored-functions postgresql-11