У меня есть требование, в котором мне нужно получить users latest 5 remarks
данных, включая его User ID
.
Итак, я использовал cross apply
и использовал RemarksData as alias
имя.
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.
Я также пробовал некоторые онлайн-конвертеры, но у меня ничего не получалось.
При необходимости могу предоставить дополнительную информацию.
Запрос 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;
Но он возвращает только 1 запись для каждого должника (пользователя). Но мне нужны последние 5 записей. Если я поставлю LIMIT 5
, то у меня возникнет проблема.