MySQL
2 개의 테이블이있는 데이터베이스를 사용하고 있습니다. 내 목표는 한 테이블에서 주어진 간격을 사용하여 다른 테이블에서 값을 선택하는 것입니다. 내 예에서는 select ErrorCode WHERE Errors
. Time_Stamp is between Batch. Time_Stamp for each BatchNum
.
CREATE TABLE Batch (BatchNum INT, Time_Stamp DATETIME);
INSERT INTO Batch VALUES (1,'2020-12-17 07:29:36'), (1, '2020-12-17 08:31:56'), (1, '2020-12-17 08:41:56'), (2, '2020-12-17 09:31:13'), (2, '2020-12-17 10:00:00'), (2, '2020-12-17 10:00:57'), (2, '2020-12-17 10:01:57'), (3, '2020-12-17 10:47:59'), (3, '2020-12-17 10:48:59'), (3, '2020-12-17 10:50:59');
CREATE TABLE Errors (ErrorCode INT, Time_Stamp DATETIME);
INSERT INTO Errors VALUES (10, '2020-12-17 07:29:35'), (11, '2020-12-17 07:30:00'), (12, '2020-12-17 07:30:35'), (10, '2020-12-17 07:30:40'), (22, '2020-12-17 10:01:45'), (23, '2020-12-17 10:48:00');
이 중에서 2 개를 선택하고 싶습니다.
SELECT BatchNum, ErrorCode, Errors.Time_Stamp WHERE Erorrs.Time_Stamp BETWEEN 배치 시작과 배치 끝과 같은 것
| BatchNum | ErrorCode | Errors.Time_Stamp |
+----------+-----------+---------------------+
| 1 | 11 | 2020-12-17 07:30:00 |
| 1 | 12 | 2020-12-17 07:30:35 |
| 1 | 10 | 2020-12-17 07:30:40 |
| 2 | 22 | 2020-12-17 10:01:45 |
| 3 | 23 | 2020-12-17 10:48:00 |
+----------+-----------+---------------------+
그리고 SELECT BatchNum, ErrorCode, Errors.Time_Stamp WHERE Erorrs.Time_Stamp BETWEEN 특정 배치의 시작과 같은 것 (여기서는 배치 1의 경우)
| ErrorCode | Errors.Time_Stamp |
+----------+-----------+----------+
| 11 | 2020-12-17 07:30:00 |
| 12 | 2020-12-17 07:30:35 |
| 10 | 2020-12-17 07:30:40 |
+----------+-----------+----------+
나는 사용하고 있습니다 :
select *
from (
select e.*,
lag(BatchNum) over(order by time) lag_BatchNum
from Batch e
) e
where not lag_BatchNum <=> BatchNum
BatchNum
변경 사항 을 찾을 수 있지만 다른 선택 항목에 이것을 포함하여 ErrorCodes
다른 BatchNum
.
이 일종의 아마 JOIN
내가 할 수있는 일이,하지만 내 주요 문제는 내가 사이의 오류를 얻을 시간 간격을 얻는 방법이다.
도움을 주셔서 감사합니다
나는 당신이 원한다고 생각합니다 :
select b.*, e.error_code, e.time_stamp as error_timestamp
from (
select b.*,
lead(time_stamp) over(order by time_stamp) lead_time_stamp
from batch b
) b
inner join errors e
on e.time_stamp >= b.time_stamp
and (e.time_stamp < b.lead_time_stamp or b.lead_time_stamp is null)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다