在 SQL 查询中连接表中的多行,其中日期和班次相同

问题描述 投票:0回答:1

我正在使用此 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

我知道我需要某种连接,但我不知道如何连接到同一张表(如果可行的话)。 预先感谢您的帮助!

sql join self-join
1个回答
0
投票

如果我的问题描述正确,这可能会对您有所帮助。

由于我没有你的数据库结构,这里有一个简单的例子。

假设这是我们的桌子:

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 最大 约翰 杰西卡
© www.soinside.com 2019 - 2024. All rights reserved.