Details
Description
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
CREATE OR REPLACE TABLE test_kpi_date ( |
the_date date NOT NULL PRIMARY KEY |
);
|
the_date org_type org_id dept_id cco_stk_ttl
|
2021-08-12 dis 10 ADVB 1 <- ?????
|
2021-08-12 dis 10 ADVB 4096 <- ?????
|
2021-08-12 dis 11 ADVB 2
|
2021-08-12 dis 12 ADVB <null>
|
2021-08-12 reg 1 ADVB 1 <- ?????
|
2021-08-12 reg 1 ADVB 4098 <- ?????
|
2021-08-12 dis 21 ADVB 96
|
2021-08-12 dis 22 ADVB 256
|
2021-08-12 dis 23 ADVB 512
|
2021-08-12 reg 2 ADVB 864
|
2021-08-12 nsc MMD ADVB 4963
|
generated with:
CREATE OR REPLACE TABLE test_kpi_date ( |
"id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, |
the_date date NOT NULL |
);
|
result looks good:
the_date org_type org_id dept_id cco_stk_ttl
|
2021-08-12 dis 10 ADVB 4097
|
2021-08-12 dis 11 ADVB 2
|
2021-08-12 dis 12 ADVB <null>
|
2021-08-12 reg 1 ADVB 4099
|
2021-08-12 dis 21 ADVB 96
|
2021-08-12 dis 22 ADVB 256
|
2021-08-12 dis 23 ADVB 512
|
2021-08-12 reg 2 ADVB 864
|
2021-08-12 nsc MMD ADVB 4963
|
It looks like MDEV-25714.
Test Data:
SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' |
|
CREATE OR REPLACE TABLE test_kpi_date ( |
the_date date NOT NULL |
, PRIMARY KEY ("the_date") |
);
|
|
SELECT * |
FROM test_kpi_date tkd |
|
INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); |
|
CREATE OR REPLACE TABLE test_org_district ( |
"id" int(11) NOT NULL AUTO_INCREMENT, |
"nsc_id" char(5) NOT NULL, |
"dept_id" char(4) NOT NULL, |
"district_id" char(3) NOT NULL, |
"region_id" char(2) NOT NULL, |
PRIMARY KEY ("id"), |
UNIQUE KEY "dept_district" ("dept_id","district_id"), |
KEY "region_id" ("dept_id","region_id") |
);
|
|
INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES |
('MMD','ADVB','10','1'), |
('MMD','ADVB','11','1'), |
('MMD','ADVB','21','2'), |
('MMD','ADVB','22','2'); |
|
CREATE OR REPLACE TABLE "test_org_partner" ( |
"dept_id" char(4) CHARACTER SET utf8 NOT NULL, |
"ptn_id" char(5) CHARACTER SET utf8, |
"district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', |
"nsc_id" char(5) CHARACTER SET utf8 NOT NULL, |
PRIMARY KEY ("ptn_id","dept_id"), |
KEY "dept_ptn" ("dept_id","ptn_id"), |
KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") |
);
|
|
INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES |
('ADVB','10001','10','MMD'), |
('ADVB','10002','10','MMD'), |
('ADVB','10003','10','MMD'), |
('ADVB','11001','11','MMD'), |
('ADVB','11002','11','MMD'), |
('ADVB','10740','21','MMD'), |
('ADVB','10741','21','MMD'), |
('ADVB','10429','22','MMD'), |
('ADVB','10771','23','MMD'); |
|
CREATE OR REPLACE TABLE "test_kpi_measure" ( |
"the_date" date DEFAULT NULL, |
"ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', |
"cco_stk_ttl" int(11) DEFAULT NULL, |
PRIMARY KEY ("the_date","ptn_id"), |
KEY "ptn_id_idx" ("ptn_id") |
);
|
|
INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES |
(current_date-1,'10001',4096), |
(current_date-1,'10002',1), |
(current_date-2,'10002',null), |
(current_date-1,'11001',2), |
(current_date-2,'11001',4), |
(current_date-1,'11003',1024), |
(current_date-2,'11003',2048), |
(current_date-1,'10580',8), |
(current_date-1,'10499',16), |
(current_date-1,'10740',32), |
(current_date-1,'10741',64), |
(current_date-2,'10741',128), |
(current_date-1,'10429',256), |
(current_date-1,'10771',512); |
SQL with wrong result:
SELECT org.the_date |
, org.org_type
|
, org.org_id
|
, org.dept_id
|
, msr.`cco_stk_ttl`
|
FROM ( |
SELECT cal.the_date |
, org.dept_id
|
, case when org.region_id <=> null then 'nsc' |
when org.district_id <=> null then 'reg' |
else 'dis' |
end as org_type |
, coalesce(org.district_id, org.region_id, 'MMD') as org_id |
, org.district_id
|
, org.region_id
|
FROM test_kpi_date cal |
CROSS JOIN test_org_district org |
WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') |
AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY |
GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP |
HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) |
) org
|
LEFT JOIN ( |
SELECT sub.the_date |
, dis.dept_id
|
, dis.region_id
|
, dis.district_id
|
, SUM(sub.cco_stk_ttl) as cco_stk_ttl |
FROM test_kpi_measure sub |
JOIN test_org_partner org ON org.ptn_id = sub.ptn_id |
JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id |
WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') |
-- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY
|
GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP |
) msr
|
ON msr.the_date = org.the_date |
and msr.dept_id <=> org.dept_id |
and msr.region_id <=> org.region_id |
and msr.district_id <=> org.district_id |
the result is correct if there is no index on the column the_date:
CREATE OR REPLACE TABLE test_kpi_date ( |
"id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, |
the_date date NOT NULL |
-- , PRIMARY KEY ("the_date")
|
-- , UNIQUE (the_date)
|
);
|
You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE).
Without UNIQUE/PRIMARY Index on the_date it works fine.
Attachments
Issue Links
- relates to
-
MDEV-27496 Can Split Materialization work with WITH ROLLUP?
-
- Open
-
Activity
Field | Original Value | New Value |
---|---|---|
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','13','1'), ('MMD','ADVB','14','1'), ('MMD','ADVB','15','1'), ('MMD','ADVB','16','1'), ('MMD','ADVB','17','1'), ('MMD','ADVB','18','1'), ('MMD','ADVB','10','1'), ('MMD','ADVB','21','2'); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','23','2'), ('MMD','ADVB','24','2'), ('MMD','ADVB','25','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','26','2'), ('MMD','ADVB','27','2'), ('MMD','ADVB','28','2'), ('MMD','ADVB','99','9'), ('MMD','ADVB','90','9'); CREATE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','11078','13','MMD'), ('ADVB','10220','14','MMD'), ('ADVB','10400','15','MMD'), ('ADVB','10030','16','MMD'), ('ADVB','10254','17','MMD'), ('ADVB','10881','18','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'), ('ADVB','11206','24','MMD'), ('ADVB','10048','25','MMD'), ('ADVB','10034','26','MMD'), ('ADVB','10369','27','MMD'), ('ADVB','10307','28','MMD'); CREATE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',20), (current_date-1,'10580',11), (current_date-1,'10499',2), (current_date-1,'11078',39), (current_date-1,'10220',19), (current_date-1,'10400',18), (current_date-1,'10030',22), (current_date-1,'10254',6), (current_date-1,'10881',6), (current_date-1,'10740',19), (current_date-1,'10429',8), (current_date-1,'10771',13), (current_date-1,'11206',91), (current_date-1,'10048',13), (current_date-1,'10034',5), (current_date-1,'10369',19), (current_date-1,'10307',24); {code} |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','13','1'), ('MMD','ADVB','14','1'), ('MMD','ADVB','15','1'), ('MMD','ADVB','16','1'), ('MMD','ADVB','17','1'), ('MMD','ADVB','18','1'), ('MMD','ADVB','10','1'), ('MMD','ADVB','21','2'); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','23','2'), ('MMD','ADVB','24','2'), ('MMD','ADVB','25','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','26','2'), ('MMD','ADVB','27','2'), ('MMD','ADVB','28','2'), ('MMD','ADVB','99','9'), ('MMD','ADVB','90','9'); CREATE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','11078','13','MMD'), ('ADVB','10220','14','MMD'), ('ADVB','10400','15','MMD'), ('ADVB','10030','16','MMD'), ('ADVB','10254','17','MMD'), ('ADVB','10881','18','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'), ('ADVB','11206','24','MMD'), ('ADVB','10048','25','MMD'), ('ADVB','10034','26','MMD'), ('ADVB','10369','27','MMD'), ('ADVB','10307','28','MMD'); CREATE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',20), (current_date-1,'10580',11), (current_date-1,'10499',2), (current_date-1,'11078',39), (current_date-1,'10220',19), (current_date-1,'10400',18), (current_date-1,'10030',22), (current_date-1,'10254',6), (current_date-1,'10881',6), (current_date-1,'10740',19), (current_date-1,'10429',8), (current_date-1,'10771',13), (current_date-1,'11206',91), (current_date-1,'10048',13), (current_date-1,'10034',5), (current_date-1,'10369',19), (current_date-1,'10307',24); {code} |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','13','1'), ('MMD','ADVB','14','1'), ('MMD','ADVB','15','1'), ('MMD','ADVB','16','1'), ('MMD','ADVB','17','1'), ('MMD','ADVB','18','1'), ('MMD','ADVB','10','1'), ('MMD','ADVB','21','2'); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','23','2'), ('MMD','ADVB','24','2'), ('MMD','ADVB','25','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','26','2'), ('MMD','ADVB','27','2'), ('MMD','ADVB','28','2'), ('MMD','ADVB','99','9'), ('MMD','ADVB','90','9'); CREATE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','11078','13','MMD'), ('ADVB','10220','14','MMD'), ('ADVB','10400','15','MMD'), ('ADVB','10030','16','MMD'), ('ADVB','10254','17','MMD'), ('ADVB','10881','18','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'), ('ADVB','11206','24','MMD'), ('ADVB','10048','25','MMD'), ('ADVB','10034','26','MMD'), ('ADVB','10369','27','MMD'), ('ADVB','10307','28','MMD'); CREATE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',20), (current_date-1,'10580',11), (current_date-1,'10499',2), (current_date-1,'11078',39), (current_date-1,'10220',19), (current_date-1,'10400',18), (current_date-1,'10030',22), (current_date-1,'10254',6), (current_date-1,'10881',6), (current_date-1,'10740',19), (current_date-1,'10429',8), (current_date-1,'10771',13), (current_date-1,'11206',91), (current_date-1,'10048',13), (current_date-1,'10034',5), (current_date-1,'10369',19), (current_date-1,'10307',24); {code} SQL with wrong result: {code:java} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , dis.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id -- , null as ptn_id , dis.district_id , dis.region_id -- , 1 as is_valid_ptn -- @todo is_show_pale ? FROM test_kpi_date cal CROSS JOIN test_org_district dis WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR dis.dept_id IS NULL) ) org -- LEFT JOIN ( SELECT sub.the_date , org.dept_id , dis.region_id , dis.district_id , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:java} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , dis.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id -- , null as ptn_id , dis.district_id , dis.region_id -- , 1 as is_valid_ptn -- @todo is_show_pale ? FROM test_kpi_date cal CROSS JOIN test_org_district dis WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR dis.dept_id IS NULL) ) org -- LEFT JOIN ( SELECT sub.the_date , org.dept_id , dis.region_id , dis.district_id , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} |
Affects Version/s | 10.5.12 [ 26025 ] | |
Affects Version/s | 10.5.10 [ 25204 ] |
Summary | group by returns incorrect results | subquery with group by joined with nullsafe oprator returns incorrect results |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','13','1'), ('MMD','ADVB','14','1'), ('MMD','ADVB','15','1'), ('MMD','ADVB','16','1'), ('MMD','ADVB','17','1'), ('MMD','ADVB','18','1'), ('MMD','ADVB','10','1'), ('MMD','ADVB','21','2'); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','23','2'), ('MMD','ADVB','24','2'), ('MMD','ADVB','25','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','26','2'), ('MMD','ADVB','27','2'), ('MMD','ADVB','28','2'), ('MMD','ADVB','99','9'), ('MMD','ADVB','90','9'); CREATE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','11078','13','MMD'), ('ADVB','10220','14','MMD'), ('ADVB','10400','15','MMD'), ('ADVB','10030','16','MMD'), ('ADVB','10254','17','MMD'), ('ADVB','10881','18','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'), ('ADVB','11206','24','MMD'), ('ADVB','10048','25','MMD'), ('ADVB','10034','26','MMD'), ('ADVB','10369','27','MMD'), ('ADVB','10307','28','MMD'); CREATE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',20), (current_date-1,'10580',11), (current_date-1,'10499',2), (current_date-1,'11078',39), (current_date-1,'10220',19), (current_date-1,'10400',18), (current_date-1,'10030',22), (current_date-1,'10254',6), (current_date-1,'10881',6), (current_date-1,'10740',19), (current_date-1,'10429',8), (current_date-1,'10771',13), (current_date-1,'11206',91), (current_date-1,'10048',13), (current_date-1,'10034',5), (current_date-1,'10369',19), (current_date-1,'10307',24); {code} SQL with wrong result: {code:java} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , dis.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id -- , null as ptn_id , dis.district_id , dis.region_id -- , 1 as is_valid_ptn -- @todo is_show_pale ? FROM test_kpi_date cal CROSS JOIN test_org_district dis WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR dis.dept_id IS NULL) ) org -- LEFT JOIN ( SELECT sub.the_date , org.dept_id , dis.region_id , dis.district_id , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:java} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , dis.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id -- , null as ptn_id , dis.district_id , dis.region_id -- , 1 as is_valid_ptn -- @todo is_show_pale ? FROM test_kpi_date cal CROSS JOIN test_org_district dis WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR dis.dept_id IS NULL) ) org -- LEFT JOIN ( SELECT sub.the_date , org.dept_id , dis.region_id , dis.district_id , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} |
Summary | subquery with group by joined with nullsafe oprator returns incorrect results | query with group and ROLLUP returns incorrect results |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Priority | Major [ 3 ] | Trivial [ 5 ] |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
PLEASE CLOSE! IT IS OBSOLETE!
A SQL returns invalid data if using field from "other" table: Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
PLEASE CLOSE! IT IS OBSOLETE!
A SQL returns invalid data if using field from "other" table: Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Summary | query with group and ROLLUP returns incorrect results | subquery with groupby and ROLLUP returns incorrect results on |
Summary | subquery with groupby and ROLLUP returns incorrect results on | subquery with groupby and ROLLUP returns incorrect results |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 2021-08-09 nsc MMD ADVB 335 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-09 dis 90 ADVB 2021-08-09 dis 99 ADVB 2021-08-09 reg 9 ADVB 2021-08-09 nsc MMD ADVB 335 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:java} CREATE OR REPLACE TABLE test_kpi_date (the_date date); INSERT INTO test_kpi_date VALUES (current_date), (current_date-1); -- cockpit.org_district definition CREATE OR REPLACE TABLE test_org_district ( "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','12','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'), ('MMD','ADVB','23','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10284','10','MMD'), ('ADVB','10580','11','MMD'), ('ADVB','10499','12','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10284',30), (current_date-1,'10580',30), (current_date-1,'10499',40), (current_date-1,'10740',30), (current_date-1,'10429',30), (current_date-1,'10771',40); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',0), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',0), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP {code} Code that works: {code:java} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} SELECT sub.the_date , org.dept_id , case when dis.region_id <=> null then 'nsc' when dis.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(dis.district_id, dis.region_id, 'MMD') as org_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, org.dept_id, dis.region_id, dis.district_id WITH ROLLUP -- <<<< ONLY changing dis -> org {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} dis.dept_id = org.dept_id are equal, but showing different content with GROUP BY and ROLLUP. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Summary | subquery with groupby and ROLLUP returns incorrect results | subquery with groupby and ROLLUP returns incorrect results on LEFT JOIN on INDEXED values |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
A SQL returns invalid data if using field from "other" table:
Sample: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample:
{code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample:
{code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 0 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 2 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 3 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 867 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample:
{code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample:
{code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} correct would be: CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample with
CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Sample with
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Sample with
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} Code that works: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} the result is correct if there is no index on the column the_date: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Priority | Trivial [ 5 ] | Major [ 3 ] |
Description |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 2021-08-12 dis 10 ADVB 4096 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 2021-08-12 reg 1 ADVB 4098 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} the result is correct if there is no index on the column the_date: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 <- ????? 2021-08-12 dis 10 ADVB 4096 <- ????? 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 <- ????? 2021-08-12 reg 1 ADVB 4098 <- ????? 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} the result is correct if there is no index on the column the_date: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Description |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 <- ????? 2021-08-12 dis 10 ADVB 4096 <- ????? 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 <- ????? 2021-08-12 reg 1 ADVB 4098 <- ????? 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} the result is correct if there is no index on the column the_date: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Wrong result, duplicate group by values and wrong aggregation "row"-data (row 1,2 and 5,6):
{code:sql} CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL PRIMARY KEY ); {code} {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 1 <- ????? 2021-08-12 dis 10 ADVB 4096 <- ????? 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 1 <- ????? 2021-08-12 reg 1 ADVB 4098 <- ????? 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} generated with: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL ); {code} result looks good: {code:csv} the_date org_type org_id dept_id cco_stk_ttl 2021-08-12 dis 10 ADVB 4097 2021-08-12 dis 11 ADVB 2 2021-08-12 dis 12 ADVB <null> 2021-08-12 reg 1 ADVB 4099 2021-08-12 dis 21 ADVB 96 2021-08-12 dis 22 ADVB 256 2021-08-12 dis 23 ADVB 512 2021-08-12 reg 2 ADVB 864 2021-08-12 nsc MMD ADVB 4963 {code} It looks like Test Data: {code:sql} SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ONLY_FULL_GROUP_BY' CREATE OR REPLACE TABLE test_kpi_date ( the_date date NOT NULL , PRIMARY KEY ("the_date") ); SELECT * FROM test_kpi_date tkd INSERT INTO test_kpi_date VALUES (current_date), (current_date-1), (current_date-2), (current_date-3); CREATE OR REPLACE TABLE test_org_district ( "id" int(11) NOT NULL AUTO_INCREMENT, "nsc_id" char(5) NOT NULL, "dept_id" char(4) NOT NULL, "district_id" char(3) NOT NULL, "region_id" char(2) NOT NULL, PRIMARY KEY ("id"), UNIQUE KEY "dept_district" ("dept_id","district_id"), KEY "region_id" ("dept_id","region_id") ); INSERT INTO test_org_district (nsc_id,dept_id,district_id,region_id) VALUES ('MMD','ADVB','10','1'), ('MMD','ADVB','11','1'), ('MMD','ADVB','21','2'), ('MMD','ADVB','22','2'); CREATE OR REPLACE TABLE "test_org_partner" ( "dept_id" char(4) CHARACTER SET utf8 NOT NULL, "ptn_id" char(5) CHARACTER SET utf8, "district_id" char(3) CHARACTER SET utf8 NOT NULL DEFAULT '0', "nsc_id" char(5) CHARACTER SET utf8 NOT NULL, PRIMARY KEY ("ptn_id","dept_id"), KEY "dept_ptn" ("dept_id","ptn_id"), KEY "dept_district_ptn" ("dept_id","district_id","ptn_id") ); INSERT INTO test_org_partner (dept_id,ptn_id,district_id,nsc_id) VALUES ('ADVB','10001','10','MMD'), ('ADVB','10002','10','MMD'), ('ADVB','10003','10','MMD'), ('ADVB','11001','11','MMD'), ('ADVB','11002','11','MMD'), ('ADVB','10740','21','MMD'), ('ADVB','10741','21','MMD'), ('ADVB','10429','22','MMD'), ('ADVB','10771','23','MMD'); CREATE OR REPLACE TABLE "test_kpi_measure" ( "the_date" date DEFAULT NULL, "ptn_id" char(5) CHARACTER SET utf8 NOT NULL DEFAULT '', "cco_stk_ttl" int(11) DEFAULT NULL, PRIMARY KEY ("the_date","ptn_id"), KEY "ptn_id_idx" ("ptn_id") ); INSERT INTO test_kpi_measure (the_date,ptn_id,cco_stk_ttl) VALUES (current_date-1,'10001',4096), (current_date-1,'10002',1), (current_date-2,'10002',null), (current_date-1,'11001',2), (current_date-2,'11001',4), (current_date-1,'11003',1024), (current_date-2,'11003',2048), (current_date-1,'10580',8), (current_date-1,'10499',16), (current_date-1,'10740',32), (current_date-1,'10741',64), (current_date-2,'10741',128), (current_date-1,'10429',256), (current_date-1,'10771',512); {code} SQL with wrong result: {code:sql} SELECT org.the_date , org.org_type , org.org_id , org.dept_id , msr.`cco_stk_ttl` FROM ( SELECT cal.the_date , org.dept_id , case when org.region_id <=> null then 'nsc' when org.district_id <=> null then 'reg' else 'dis' end as org_type , coalesce(org.district_id, org.region_id, 'MMD') as org_id , org.district_id , org.region_id FROM test_kpi_date cal CROSS JOIN test_org_district org WHERE org.nsc_id = 'MMD' and org.dept_id IN ('ADVB') AND cal.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY cal.the_date, org.dept_id, org.region_id, org.district_id WITH ROLLUP HAVING NOT (cal.the_date IS NULL OR org.dept_id IS NULL) ) org LEFT JOIN ( SELECT sub.the_date , dis.dept_id , dis.region_id , dis.district_id , SUM(sub.cco_stk_ttl) as cco_stk_ttl FROM test_kpi_measure sub JOIN test_org_partner org ON org.ptn_id = sub.ptn_id JOIN test_org_district dis ON dis.dept_id = org.dept_id AND dis.district_id = org.district_id WHERE dis.nsc_id = 'MMD' and dis.dept_id IN ('ADVB') -- AND sub.the_date = CURRENT_DATE() - INTERVAL 1 DAY GROUP BY sub.the_date, dis.dept_id, dis.region_id, dis.district_id WITH ROLLUP ) msr ON msr.the_date = org.the_date and msr.dept_id <=> org.dept_id and msr.region_id <=> org.region_id and msr.district_id <=> org.district_id {code} the result is correct if there is no index on the column the_date: {code:sql} CREATE OR REPLACE TABLE test_kpi_date ( "id" int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, the_date date NOT NULL -- , PRIMARY KEY ("the_date") -- , UNIQUE (the_date) ); {code} You can see, we try to use different definitions with the same behavior (wrong) when the_date get an index (PRIMARY/UNIQUE). Without UNIQUE/PRIMARY Index on the_date it works fine. |
Priority | Major [ 3 ] | Critical [ 2 ] |
Affects Version/s | 10.6.4 [ 26033 ] |
Labels | need_feedback |
Attachment | z-custom.cnf [ 59085 ] |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Fix Version/s | 10.5 [ 23123 ] | |
Fix Version/s | 10.6 [ 24028 ] |
Affects Version/s | 10.3 [ 22126 ] | |
Affects Version/s | 10.4 [ 22408 ] | |
Affects Version/s | 10.5 [ 23123 ] | |
Affects Version/s | 10.6 [ 24028 ] |
Labels | need_feedback |
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Assignee | Sergei Petrunia [ psergey ] |
Status | Confirmed [ 10101 ] | In Progress [ 3 ] |
Assignee | Sergei Petrunia [ psergey ] | Igor Babaev [ igor ] |
Status | In Progress [ 3 ] | In Review [ 10002 ] |
Workflow | MariaDB v3 [ 124193 ] | MariaDB v4 [ 143798 ] |
Assignee | Igor Babaev [ igor ] | Sergei Petrunia [ psergey ] |
Status | In Review [ 10002 ] | Stalled [ 10000 ] |
Link | This issue relates to MDEV-27496 [ MDEV-27496 ] |
Component/s | Optimizer [ 10200 ] | |
Fix Version/s | 10.3.33 [ 26805 ] | |
Fix Version/s | 10.4.23 [ 26807 ] | |
Fix Version/s | 10.5.14 [ 26809 ] | |
Fix Version/s | 10.6.6 [ 26811 ] | |
Fix Version/s | 10.7.2 [ 26813 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Fix Version/s | 10.5 [ 23123 ] | |
Fix Version/s | 10.6 [ 24028 ] | |
Resolution | Fixed [ 1 ] | |
Status | Stalled [ 10000 ] | Closed [ 6 ] |
Zendesk Related Tickets | 150990 |
Could you please add .cnf file(s)? I tried to repeat the issue, but I was getting the expected result.