지정된 값이 처음 나타날 때까지 모든 행 선택
다음 데이터의 경우:
날짜|값|수표
2009 | 5 | 1
2008 | 5 | 1
2007 | 5 | 1
2006 | 5 | 0
2005 | 5 | 0
2004 | 5 | 1
2003 | 5 | 1
2002 | 5 | 1
2009년 이후 체크 열에서 처음 0이 발생할 때까지 모든 행을 선택해야 합니다.
날짜|값|수표
2009 | 5 | 1
2008 | 5 | 1
2007 | 5 | 1
저는 lag 기능으로 시도했지만, 한 달 전에야 확인할 수 있었습니다.
저는 Oracle 10g에서 일하고 있습니다.
업데이트:
모든 것이 잘 작동하는 것 같습니다. 제 테스트 데이터 세트가 너무 작아서 성능 차이를 설명할 수 없습니다.
SELECT * FROM mytable where date > (
SELECT max(date) FROM mytable where check = 0
)
SELECT *
FROM (
SELECT m.*,
MIN(CASE WHEN check = 0 THEN 0 ELSE 1 END) OVER (ORDER BY date DESC)) AS mn
FROM mytable
)
WHERE mn = 1
또는 더 나은 것:
SELECT *
FROM (
SELECT m.*, ROW_NUMBER() OVER (ORDER BY mydate DESC) AS rn
FROM mytable m
ORDER BY
mydate DESC
)
WHERE rownum = DECODE(check, 0, NULL, rn)
ORDER BY
mydate DESC
후자의 쿼리는 체크 표시된 첫 번째 0에 도달하는 즉시 검색을 실제로 중지합니다.
DECLARE @mytable TABLE (date integer, [value] integer, [check] integer)
INSERT INTO @mytable VALUES (2009, 5, 1)
INSERT INTO @mytable VALUES (2008, 5, 1)
INSERT INTO @mytable VALUES (2007, 5, 1)
INSERT INTO @mytable VALUES (2006, 5, 0)
INSERT INTO @mytable VALUES (2005, 5, 0)
INSERT INTO @mytable VALUES (2004, 5, 1)
INSERT INTO @mytable VALUES (2003, 5, 1)
INSERT INTO @mytable VALUES (2002, 5, 1)
SELECT *
FROM @mytable
WHERE date > (SELECT MAX(date) FROM @mytable WHERE [Check] = 0)
언급URL : https://stackoverflow.com/questions/733979/selecting-all-rows-until-first-occurrence-of-given-value
'programing' 카테고리의 다른 글
GET 인수가 없는 요청 문자열 (0) | 2023.08.30 |
---|---|
XDomainRequest 또는 ActiveXObject('Microsoft.XMLHTTP') (0) | 2023.08.30 |
파일에 대한 모든 Pylint 경고 사용 안 함 (0) | 2023.08.25 |
Angular4 IE11의 응용 프로그램 실행 문제 (0) | 2023.08.25 |
MariaDB는 정말 "WITH" 중간 결과를 캐싱하거나 재사용하고 있습니까? (0) | 2023.08.25 |