我坚持按照id / rev对这个表中的项目求和。 我需要以下结果:
ID1 SYS1 +/-x items (delevered items - returned items)
ID1 SYS2 +/-x items
ID1 SYS3 +/-x items
ID2 SYS1 +/-x items
ID2 SYS2 +/-x items
ID2 SYS3 +/-x items
但是我只需要减去该值来计算总和。 我用CASE WHEN建立了一个列表(内容='返回x项')那么从0到99的所有可能性,但我不认为这是去往这里的方式。 被删除的是加号,返回的是负数
CREATE TABLE IF NOT EXISTS `docs` (
`id` varchar(200) NOT NULL,
`rev` varchar(200)NOT NULL,
`content` varchar(200) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `rev`, `content`) VALUES
('ID1', 'SYS1', 'returned 1 item'),
('ID2', 'SYS1', 'delivered 2 items'),
('ID1', 'SYS2', 'returned 41 items'),
('ID1', 'SYS3', 'returned 12 items'),
('ID2', 'SYS1', 'returned 12 items'),
('ID1', 'SYS1', 'delivered 11 items'),
('ID2', 'SYS1', 'returned 13 items'),
('ID1', 'SYS2', 'returned 14 items'),
('ID2', 'SYS2', 'delivered 11 items'),
('ID2', 'SYS2', 'returned 12 items'),
('ID1', 'SYS3', 'delivered 17 items'),
('ID1', 'SYS2', 'returned 11 items'),
('ID1', 'SYS1', 'delivered 14 items'),
('ID2', 'SYS1', 'returned 11 items'),
('ID2', 'SYS1', 'returned 14 items'),
('ID1', 'SYS2', 'delivered 11 items'),
('ID1', 'SYS1', 'returned 12 items'),
('ID2', 'SYS1', 'delivered 15 items'),
('ID1', 'SYS2', 'returned 11 items'),
('ID1', 'SYS1', 'delivered 14 items'),
('ID2', 'SYS1', 'returned 15 items'),
('ID1', 'SYS2', 'delivered 14 items'),
('ID1', 'SYS3', 'returned 18 items');
答案 0 :(得分:0)
作为变体,您可以使用REPLACE
功能,然后使用CAST
字符串int
SELECT
*,
IF(content LIKE 'returned%',-1,1)*CAST(REPLACE(REPLACE(REPLACE(REPLACE(content,'delivered ',''),'returned ',''),' items',''),' item','') AS SIGNED) QtyVer1,
IF(content LIKE 'returned%',-1,1)*SUBSTRING_INDEX(SUBSTRING_INDEX(content,' ',-2),' ',1) QtyVer2
FROM docs
您也可以尝试使用SUBSTRING_INDEX
- 查看QtyVer2
。
使用GROUP BY
SELECT
id,
rev,
SUM(IF(content LIKE 'returned%',-1,1)*SUBSTRING_INDEX(SUBSTRING_INDEX(content,' ',-2),' ',1)) Total
FROM docs
GROUP BY id,rev
答案 1 :(得分:0)
CREATE TABLE docs (
tDate DATETIME NULL,
id varchar(200) NOT NULL,
rev varchar(200)NOT NULL,
content varchar(200) NOT NULL
);
INSERT INTO docs (tDate, id, rev, content) VALUES
('2018-01-01 12:00','ID1', 'SYS1', 'returned 3 item'),
('2018-01-02 12:00','ID1', 'SYS2', 'delivered items: 4'),
('2018-01-03 12:00','ID2', 'SYS3', 'returned 2 item'),
('2018-01-03 14:10','ID1', 'RESET', ''),
('2018-01-04 12:00','ID2', 'SYS1', 'delivered items: 1'),
('2018-01-05 12:00','ID3', 'SYS2', 'returned 1 item'),
('2018-01-06 12:00','ID3', 'SYS3', 'delivered items: 1'),
('2018-01-07 12:00','ID2', 'SYS1', 'delivered items: 1'),
('2018-01-08 12:00','ID3', 'SYS2', 'returned 1 item'),
('2018-01-09 12:00','ID1', 'SYS2', 'delivered items: 1'),
('2018-01-10 12:00','ID3', 'SYS3', 'returned 3 item'),
('2018-01-10 12:10','ID1', 'RESET', ''),
('2018-01-10 13:00','ID2', 'SYS3', 'delivered items: 1'),
('2018-01-10 13:10','ID3', 'SYS1', 'delivered items: 1'),
('2018-01-10 13:20','ID2', 'SYS2', 'delivered items: 3'),
('2018-01-10 14:00','ID3', 'SYS1', 'delivered items: 1'),
('2018-01-10 14:10','ID3', 'RESET', ''),
('2018-01-11 12:00','ID1', 'SYS2', 'returned 2 item'),
('2018-01-11 13:00','ID1', 'SYS1', 'delivered items: 1'),
('2018-01-11 14:00','ID2', 'SYS2', 'delivered items: 3'),
('2018-01-11 15:00','ID2', 'SYS3', 'delivered items: 2'),
('2018-01-11 16:00','ID3', 'SYS2', 'returned 1 item'),
('2018-01-11 17:00','ID3', 'SYS1', 'delivered items: 2'),
('2018-01-11 17:10','ID2', 'RESET', ''),
('2018-01-11 18:00','ID2', 'SYS3', 'delivered items: 2'),
('2018-01-11 19:00','ID3', 'SYS2', 'returned 1 item');
嗨,这个总结有一些新的信息:
记录有一个时间戳,我需要在表格中不同id的最后一次RESET之后的总和。 例如,ID1在2018-01-10 12:10有一个LAST重置,我只需要在此日期之后的3个SYSx总和。 是否可以在一个查询中获得9个总和?