구별을 사용하여 표에서 고유 레코드를 하나만 선택하는 방법
나의 테이블은 같은 멤버를 가진 몇개의 기록을 가지고 있습니다.아이디. 저는 한 개의 레코드만 출력하고 싶습니다.
select DISTINCT(MemberID) from AnnualFees;
그러면 결과가 올 것입니다.하지만 다른 컬럼 데이터도 보여주고 싶지만 이걸 할 때는
select DISTINCT(MemberID),StartingDate,ExpiryDate,Amount from AnnualFees;
동일 회원을 포함한 모든 세부 사항ID 데이터도 표시됩니다.
누가 도와줄 수 있습니까?
각 구성원 ID에 대해 임의로 행을 원하는 경우에만 이를 수행할 수 있습니다.
select memberid, this, that, theother
from
(
select memberid, this, that, theother,
row_number() over (partition by memberid order by this) rn
from annualfees
)
where rn = 1;
멤버 ID당 특정 행(예: 가장 최근의 시작 날짜를 가진 행)을 원할 경우 다음으로 수정할 수 있습니다.
select memberid, this, that, theother
from
(
select memberid, this, that, theother,
row_number() over (partition by memberid order by StartDate desc) rn
from annualfees
)
where rn = 1;
이것이 당신이 필요로 하는 것인지는 모르겠지만, 당신은 별개의 것이 아니라 그룹별로 살펴볼 필요가 있을 수도 있습니다.
동일한 멤버 ID를 가진 여러 레코드가 있는 경우 다른 레코드에서 원하는 레코드를 식별하는 방법을 정확하게 지정해야 할 수도 있습니다.
각 구성원의 마지막 시작 날짜를 확인하는 방법:
SELECT memberid, max(startingdate)
FROM annualfees
GROUP BY memberid
하지만 이런 식으로 하나의 기록을 식별하고 다른 열도 표시해야 한다면, 이런 속임수를 써야 할 것 같습니다.
예를 들어 위의 SELECT를 조인과 함께 하위 쿼리하여 원하는 다른 열에 조인합니다.
SELECT subq.memid, subq.startdate, a.expirydate, a.amount
FROM (
SELECT memberid AS memid, max(startingdate) AS startdate
FROM annualfees
GROUP BY memberid ) subq
INNER JOIN annualfees a ON a.memberid = subq.memid
AND a.startingdate = subq.startdate
처음부터 끝까지 데이터 테이블도 보여줍니다("SET VERIE ON"을 사용하여 o/p를 추적/그랩했습니다).
-- show all rows
select *
from annualfees
order by memberid, startingdate
MEMBERID STARTINGDATE EXPIRYDATE AMOUNT
---------------------- ------------------------- -------------------- --------------------
1 02-DEC-09 05-FEB-10 111
1 25-JUN-10 25-JUN-11 222
2 25-APR-10 25-JUN-13 333
3 rows selected
/
-- show one member`s data using max(startingdate) as selector.
SELECT memberid, max(startingdate)
FROM annualfees
GROUP BY memberid
MEMBERID MAX(STARTINGDATE)
---------------------- -------------------------
1 25-JUN-10
2 25-APR-10
2 rows selected
/
-- show above data joined with the other columns.
SELECT subq.memid, subq.startdate, a.expirydate, a.amount
FROM (
SELECT memberid AS memid, max(startingdate) AS startdate
FROM annualfees
GROUP BY memberid ) subq
INNER JOIN annualfees a ON a.memberid = subq.memid AND a.startingdate = subq.startdate
MEMID STARTDATE EXPIRYDATE AMOUNT
---------------------- ------------------------- -------------------- --------------------
1 25-JUN-10 25-JUN-11 222
2 25-APR-10 25-JUN-13 333
2 rows selected
/
중복되는 Member가 있는 행을 선택해야 합니다.어떤 식으로든 반환할 ID.시작 날짜가 가장 큰 행을 가져옵니다.
SELECT MemberID,StartingDate,ExpiryDate,Amount
FROM AnnualFees af
WHERE NOT EXISTS (
SELECT * from AnnualFees af2
WHERE af2.MemberID = af.MemberID
AND af2.StartingDate > af.StartingDate)
DISTINCT Member를 선택ID, 시작 날짜, 만료 날짜, 연회비에서 금액
부제를 떼다
언급URL : https://stackoverflow.com/questions/3116982/how-to-select-only-one-unique-record-from-the-table-using-distinct
'programing' 카테고리의 다른 글
이미지 너비를 부모 디브의 100%로 만들되 자신의 너비보다 크지 않게 만듭니다. (0) | 2023.09.27 |
---|---|
링크 도커 컨테이너(Drupal 및 MariaDB) (0) | 2023.09.27 |
PHP에서 PDO와 함께 사용할 MySQL 데이터베이스를 선택하려면 어떻게 해야 합니까? (0) | 2023.09.27 |
기본 클래스에서 파생 클래스를 동적으로 만드는 방법 (0) | 2023.09.27 |
문자열의 HmacSHA256 서명을 생성하는 방법 (0) | 2023.09.17 |