我正在使用此 SQL 查询来收集和分析轮班生产数据。查询的结果几乎给出了我想要的结果,但并不完全是,因为进料、出料和废料计数位于不同的行中。有没有一种方法可以连接行,以便一天中的每个班次只有一行包含所有三个值?
这就是我想要的桌子的样子,沿着这些思路
移动 | 标签 | 数 | 日期 | 标签2 | 数2 | 标签3 | 数3 |
---|---|---|---|---|---|---|---|
C | 废料 | 2284 | 10/14 | 出料 | 14862 | 进给 | 17152 |
B | 废料 | 1693 | 10/14 | 出料 | 29117 | 进给 | 30828 |
A | 废料 | 1498 | 10/13 | 出料 | 33891 | 进给 | 35280 |
当前代码:
SELECT shift, tag, "count", TO_CHAR(capturetime, 'MM/DD HH24:MI:SS') AS "Datetime" ,TO_CHAR(capturetime, 'MM/DD') AS "Date"
FROM shift_data.production_counts
where machine = 'SGP3' and tag like '%Reason:Total%' and capturetime >= (CURRENT_TIMESTAMP - '8 days'::interval) and capturetime <= CURRENT_Date
and ((cast(TO_CHAR(capturetime, 'HH24') as int)=6 and cast(TO_CHAR(capturetime, 'MI') as int)>45)
or (cast(TO_CHAR(capturetime, 'HH24') as int)=7 and cast(TO_CHAR(capturetime, 'MI') as int)<1)
or (cast(TO_CHAR(capturetime, 'HH24') as int)=18 and cast(TO_CHAR(capturetime, 'MI') as int)>45)
or (cast(TO_CHAR(capturetime, 'HH24') as int)=19 and cast(TO_CHAR(capturetime, 'MI') as int)<1))
order by capturetime DESC
我知道我需要某种连接,但我不知道如何连接到同一张表(如果可行的话)。 预先感谢您的帮助!
如果我的问题描述正确,这可能会对您有所帮助。
由于我没有你的数据库结构,这里有一个简单的例子。
假设这是我们的桌子:
CREATE TABLE `person` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`father` int(11) DEFAULT NULL,
`mother` int(11) DEFAULT NULL
)
插入父亲、母亲和孩子:
INSERT INTO `person` (`id`, `name`, `father`, `mother`) VALUES
(1, 'John', NULL, NULL),
(2, 'Jessica', NULL, NULL),
(3, 'Max', 1, 2)
现在,您可以使用我们选择的表的两个联接来选择每个有父亲和母亲的人:
SELECT
`person`.`id`,
`person`.`name`,
`father`.`name` AS 'father',
`mother`.`name` AS 'mother'
FROM `person`
JOIN `person` AS `father` ON `father`.`id` = `person`.`father`
JOIN `person` AS `mother` ON `mother`.`id` = `person`.`mother`
关键是为两个连接命名(此处为
father
和 mother
)
那么结果是:
id | 名字 | 父亲 | 妈妈 |
---|---|---|---|
3 | 最大 | 约翰 | 杰西卡 |