MySQL (버전 8.0 이하) : 날짜 값을 선택하고 마일스톤 날짜 테이블에서 날짜 행을 반환합니다. (MySQL (version lower then 8.0) : Select where date value and return a row of dates from table of milestone date)


문제 설명

MySQL (버전 8.0 이하) : 날짜 값을 선택하고 마일스톤 날짜 테이블에서 날짜 행을 반환합니다. (MySQL (version lower then 8.0) : Select where date value and return a row of dates from table of milestone date)

표 B의 각 행에서. ins_date 및 emp_id의 열을 결정하십시오. 그런 다음 해당 값을 사용하여 표 A에서 바닥 날짜인 날짜를 선택합니다. 그런 다음 목록에 결과를 표시합니다.</p>

예:

행 1: 테이블 B. ins_date 값은 '2022‑01‑20'이고 emp_id는 2입니다. emp_id = 고려 2 및 바닥 날짜가 '2022‑01‑20'(2022‑01‑20보다 큼)이므로 항목 PK_ID = 1을 선택합니다.

2행: 테이블 B. ins_date 값은 ' 2019‑03‑30'이고 emp_id는 2입니다. emp_id = 2이고 바닥 날짜가 '2018‑06‑29'(2018‑06‑29보다 크지만 2021‑03‑23보다 작음)이므로 항목 PK_ID를 선택합니다. = 3.

3행: 테이블 B. ins_date 값은 '2017‑06‑29'이고 emp_id는 3입니다. emp_id = 3이고 바닥 날짜가 '2016‑02‑17'(2016‑02‑17보다 크고 2018‑01‑15보다 작음)이므로 PK_ID = 5 항목을 선택합니다.

영어로 감사하고 죄송합니다.

PS 질문과 세부 사항을 어떻게 설명해야 할지 모르겠습니다. 그러나 텍스트를 이해하기 쉽게 편집하는 경우. 편집을 강력히 허용합니다.


참조 솔루션

방법 1:

You are looking for the maximum milestone_date that is less or equal to an ins_date.

Two ways to get that date:

option #1

select b.*, max(a.milestone_date) as floor_milestone_date
from b
join a on a.emp_id = b.emp_id and a.milestone_date <= b.ins_date
group by b.pk_id
order by b.pk_id;

option #2

select 
  b.*, 
  (
    select max(a.milestone_date)
    from a
    where a.emp_id = b.emp_id and a.milestone_date <= b.ins_date
  ) as floor_milestone_date
from b;

The difference between the two queries above: When there is no floor milestone date for an ins_date, then the first query doesn't return the b row, while the second query returns the b row with a null milestone date.

Now, if you want more information from table a, then join the table to one of the queries above.

The final query

select ab.*, a.pk_id
from
(
  select b.*, max(a.milestone_date) as floor_milestone_date
  from b
  join a on a.emp_id = b.emp_id and a.milestone_date <= b.ins_date
  group by b.pk_id
) ab
join a on a.emp_id = ab.emp_id and a.milestone_date = ab.floor_milestone_date
order by ab.pk_id;

(by Hacker DewdieThorsten Kettner)

참조 문서

  1. MySQL (version lower then 8.0) : Select where date value and return a row of dates from table of milestone date (CC BY‑SA 2.5/3.0/4.0)

#MySQL






관련 질문

MySQL: IN(p1)은 IN(p1, p2, ...)과 다르게 작동합니까? (MySQL: Does IN(p1) function differently to IN(p1, p2, ... )?)

SQL 테이블 카운팅 및 조인 (SQL Table Counting and Joining)

ORA-00979: Oracle에 대한 GROUP BY 표현식이 아니지만 절 차이의 컨텍스트에서 MySQL에 대해서는 유효하지 않습니다. (ORA-00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference)

PHP에서 카테고리 및 하위 카테고리 목록 검색 (Retrieve Category & Subcategory list in PHP)

R과 반짝이는 다층 테이블을 만드는 방법은 무엇입니까? (How to make multiple layered table form with R and shiny?)

mysql에서 저장 프로시저가 더 효율적입니까? (In mysql, are stored procedures more efficient?)

PHP - MySQL 쿼리 문제 (PHP - Mysql query problem)

데이터베이스 값이 이미 존재하는지 확인하는 방법 (how to check if databases values are already exists)

SQL 테이블에서 누락된 날짜를 채우는 방법 (How to fill the missing date in a sql table)

잘린 잘못된 DOUBLE 값을 수정하는 방법: '정의되지 않음' 오류 (How to fix Truncated incorrect DOUBLE value: 'undefined' error)

반복되는 NotSupportedError: 인증 플러그인 'caching_sha2_password'가 지원되지 않습니다. 이전 솔루션을 시도했지만 소용이 없었습니다. (Repeated NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported tried the previous solutions to no avail)

MySQL (버전 8.0 이하) : 날짜 값을 선택하고 마일스톤 날짜 테이블에서 날짜 행을 반환합니다. (MySQL (version lower then 8.0) : Select where date value and return a row of dates from table of milestone date)







코멘트