User ID
을 포함하여 users latest 5 remarks
데이터를 가져와야하는 요구 사항이 있습니다.
그래서 cross apply
을 사용하고 RemarksData as alias
이름을 사용했습니다.SQL에서 MySQL로 - 상위 5 개 레코드 적용
SQL 쿼리 :
select DD.DEBTOR_ID,RemarksData.*
from DMS_DEBTOR DD
cross APPLY
(
SELECT TOP 5 DF.REMARK as [Remarks]
FROM DMS_FOLLOWUP DF
WHERE DF.DEBTOR_ID = DD.DEBTOR_ID
ORDER BY DF.FOLLOWUP_TIME desc
) RemarksData where DD.BATCHNO in ('MBB EX-24') and DD.flagabort='0' order by DD.NAME
내 쿼리 샘플 데이터 : 명확한 이해를 들어
ID NAME Remarks
-----------------------------------------
2881173 ARIFFIN Sent To FV
2881173 ARIFFIN CHECKING PAYMENT
2881173 ARIFFIN FULLSETTLEMENT
2881173 ARIFFIN CALLED BV
2881173 ARIFFIN BROKEN PROMISE
-----------------------------------------
1682126 ASRI Waiting For Results
1682126 ASRI CHECKING PAYMENT
1682126 ASRI PROPOSAL
1682126 ASRI CALLED
1682126 ASRI BROKEN PROMISE
-------------------------------------------
1703446 ASRUL Sent To FV
1703446 ASRUL CHECKING PAYMENT
1703446 ASRUL PROPOSAL
1703446 ASRUL RNR
1703446 ASRUL BROKEN PROMISE
, 나는 각 사용자 레코드를 분리했습니다.
여기서 알 수 있듯이이 쿼리는 모든 사용자에게 마지막 5 개의 발언을 제공합니다.
이제 동일한 쿼리를 MySQL로 변환 할 계획이지만 교차 적용의 대안을 찾을 수 없습니다.
다른 사람이이 SQL 쿼리를 수행 할 수 있거나 적어도 MySQL로 변환 할 수 있다면 누구든지 저를 제안 할 수 있습니까?
일부 온라인 변환기도 시도했지만 나에게 도움이되지 않았습니다.
필요한 경우 추가 정보를 제공 할 수 있습니다.
SELECT
DD.DEBTOR_ID,DD.CARDNO,DD.ACCOUNTNO,DD.NAME,
,(SELECT DF.REMARK as Remarks
FROM DMS_FOLLOWUP DF
WHERE DF.DEBTOR_ID = DD.DEBTOR_ID
ORDER BY DF.FOLLOWUP_TIME DESC
LIMIT 1
) AS VALUE
FROM
DMS_DEBTOR DD limit 10;
그러나 여기에 모든 채무자 (사용자) 만 한 기록을 반환 : 나는 시도했다
MySQL의 쿼리이다. 하지만 최신 5 개의 레코드가 필요합니다. LIMIT 5
을 입력하면 문제가 발생합니다.
스택 오버플로가입니다 ** 쓰기 코드를 직접 작성한 다음 ** 문제가있는 경우 ** 시도한 것을 ** 게시 할 수 있습니다 ** 작동하지 않는 것에 대한 명확한 설명 **을 제공하고 [최소, 완료 및 확인 가능한 예제] (http://stackoverflow.com/help/mcve). [좋은 질문을하는 법을] 읽는 것이 좋습니다. (http://stackoverflow.com/help/how-to-ask) –
여기에 게시하기 전에 뭔가를 시도 할 것으로 예상됩니다. –
등가물 적용은 row_number를 사용하는 사용자의 윈도우 함수 일 것입니다 .SQL에 행 번호가 없습니다. 두 개의 사용자 변수; 각 ID에서 rowNumber를 재설정합니다. 쿼리는 행 번호가 <= 5 인 사소한 조인이됩니다. – xQbert