Hallo Ich habe die folgenden zwei Tabellen, die ein Dokument mit seiner Bühne und eine History-Tabelle darstellt, welche das Zeitdokument zeigt wurde zur nächsten Stufe bewegtMysql Join-Tabelle auf den neuesten Eintrag, der von Zeit
CREATE TABLE `document` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`description` text,
`stage` tinyint(4) NOT NULL DEFAULT '0',
`customer_name` varchar(100) DEFAULT NULL,
`creator_id` bigint(20) NOT NULL DEFAULT '0',
`customer_city` varchar(100) DEFAULT NULL,
`customer_state` varchar(100) DEFAULT NULL,
`customer_zip` varchar(50) DEFAULT NULL,
`customer_contact` varchar(100) DEFAULT NULL,
`number` varchar(100) DEFAULT NULL,
`latitude` float NOT NULL DEFAULT '0',
`longitude` float NOT NULL DEFAULT '0',
`creation_date` varchar(50) DEFAULT NULL,
`expanded_description` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `document_history` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`doc_id` bigint(20) NOT NULL,
`modifying_time` datetime DEFAULT NULL,
`changed_to_stage` tinyint(3) unsigned DEFAULT NULL,
`old_stage` tinyint(3) unsigned DEFAULT NULL,
`user_modified` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Ich brauche zu bekommen Zählstatistik basierend auf dem ausgewählten Zeitraum. Zum Beispiel muss ich wissen, wie viele Dokumente in Phase 1 während des ausgewählten Zeitraums waren, aber das Problem ist, dass wenn ein Dokument während dieses Zeitraums in mehreren verschiedenen Phasen war, ich es nur für den letzten zählen muss Bühne, z wenn doc in Phase war 1 und danach in Stufe 2 - ich brauche es für die Bühne nur zu zählen, 2.
Hier ist, was ich bis jetzt haben:
SELECT
round(sum(case when dh.modifying_time between '2016-09-15' and '2016-09-24' and dh.changed_to_stage = 1 then 1 else 0 end),0) entry_count,
round(sum(case when dh.modifying_time between '2016-09-15' and '2016-09-24' and dh.changed_to_stage = 3 then 1 else 0 end),0) pricing_count,
round(sum(case when dh.modifying_time between '2016-09-15' and '2016-09-24' and dh.changed_to_stage = 5 then 1 else 0 end),0) executed_count,
round(sum(case when dh.modifying_time between '2016-09-15' and '2016-09-24' and dh.changed_to_stage = 7 then 1 else 0 end),0) approved_count,
round(sum(case when dh.modifying_time between '2016-09-15' and '2016-09-24' and dh.changed_to_stage = 9 then 1 else 0 end),0) canceled_count
FROM document doc join document_history dh on doc.id=dh.doc_id
Das Problem hierbei ist, dass das Dokument zweimal gezählt, wenn es in diesem Zeitraum in zwei verschiedenen Phasen war.
Jede Hilfe wird geschätzt.
Danke und viele Grüße
Bitte fügen Sie Beispieldaten hinzu, um zu reproduzieren. Erzähle uns auch die Regel, Datensätze in die History-Tabelle zu schreiben. Behalten Sie den tatsächlichen Rekord in der Geschichte auch? –
Der Datensatz in der Protokolltabelle wird beim Erstellen eines Dokuments hinzugefügt, auch wenn ein Dokument von einer Phase zur nächsten verschoben wird. –