반응형
테이블에서 행 선택, 필드 값이 나올 때까지 행 무시
내부 논리에 따라 저축한 저축액과 예금 종류별로 좋은 것과 나쁜 것을 평가하는 내용을 담은 표가 있다고 치자.이 테이블에서 행을 선택하여 사용자당 이전 행부터 마지막 좋은 행까지 모두 건너뛸 수 있도록 하려면 어떻게 해야 합니까?
전에
id | 사용자 | 유형 | 금액----------------------------20 | 98 | 좋음 | 4035 | 98 | 나쁨 | 3062 | 98 | 좋음 | 2089 | 98 | 나쁨 | 6093 | 98 | 나쁨 | 10100 | 99 | 좋음 | 20103 | 99 | 좋음 | 22109 | 99 | 좋음 | 220121 | 99 | 나쁨 | 640193 | 99 | 나쁨 | 110
마지막 좋은 행이 나올 때까지 사용자의 모든 기록을 무시하고, 그 다음 행을 셀 수 있습니다.행은 연속되지 않은 ID를 증가시켜 정렬됩니다.
끝나고
id | 사용자 | 유형 | 금액----------------------------62 | 98 | 좋음 | 2089 | 98 | 나쁨 | 6093 | 98 | 나쁨 | 10100 | 99 | 좋음 | 220121 | 99 | 나쁨 | 640193 | 99 | 나쁨 | 110
테이블을 각 사용자의 최대 ID를 반환하는 쿼리에 가입합니다.type = 'good'
:
select t.*
from tablename t inner join (
select user, max(id) id
from tablename
where type = 'good'
group by user
) tt on tt.user = t.user and tt.id <= t.id
데모 보기.
결과:
| id | user | type | amount |
| --- | ---- | ---- | ------ |
| 62 | 98 | good | 20 |
| 89 | 98 | bad | 60 |
| 93 | 98 | bad | 10 |
| 109 | 99 | good | 220 |
| 121 | 99 | bad | 640 |
| 193 | 99 | bad | 110 |
하나의 방법은 상관된 하위 쿼리를 사용합니다.
select t.*
from t
where t.id >= (select max(t2.id)
from t t2
where t2.user = t.user and t2.type = 'good'
);
만약 당신이 지수를 가지고 있다면 이것은 좋은 성능을 가질 것입니다.(user, type, id)
.
당신의 질문의 문구를 토대로 볼 때, 저는 그것이 적어도 하나의 좋은 행이 필요하다고 해석하고 있습니다.그렇지 않은 경우에는 다음과 같은 논리를 사용할 수 있습니다.
select t.*
from t
where t.id >= all (select t2.id
from t t2
where t2.user = t.user and t2.type = 'good'
);
창 기능을 사용할 수도 있습니다.
select t.*
from (select t.*,
max(case when type = 'good' then id end) over (partition by user) as max_good_id
from t
) t
where id >= max_good_id;
위해서MariaDB 10.2+
, 다음과 같은 윈도우 분석 함수를 사용할 수 있습니다.
SUM() OVER (PARTITION BY ... ORDER BY ...)
WITH T2 AS
(
SELECT SUM(CASE WHEN type = 'good' THEN 1 ELSE 0 END)
OVER (PARTITION BY user ORDER BY id DESC) AS sum,
T.*
FROM T
)
SELECT id, user, type, amount
FROM T2
WHERE ( type = 'good' AND sum = 1 ) OR ( type != 'good' AND sum = 0 )
ORDER BY id;
언급URL : https://stackoverflow.com/questions/59600207/select-rows-from-a-table-ignore-rows-until-a-field-value-is-encountered
반응형
'prosource' 카테고리의 다른 글
뷰 엔진이란?실제로는 어떤 역할을 합니까? (0) | 2023.10.15 |
---|---|
가변 제품 속성:표시된 각 라디오 버튼 텍스트 값 사용자 정의 (0) | 2023.10.15 |
MySQL ERROR 2026 - SSL 연결 오류 - Ubuntu 20.04 (0) | 2023.10.10 |
"PHP Fatal error:"를 해결하려면 어떻게 해야 합니까?알 수 없음: 여는 데 실패했습니다." (0) | 2023.10.10 |
Woocommerce에서 총 배송 주문받기 3 (0) | 2023.10.10 |