Получение самой новой записи из таблицы с помощью mysql - PullRequest
0 голосов
/ 07 ноября 2018

Это должно быть ежу понятно, но я в тупике. Я привык использовать агрегат FIRST в MsAccess, но у MySql такого нет. Вот простая таблица. Я хочу вернуть самую последнюю запись, основанную на дате, для каждого уникального «идентификатора группы». Мне нужны три записи в желтом.

Меня попросили добавить мой полный запрос. Я попробовал одно из предложений, используя функцию JOIN, заменив 't' именем временной таблицы, но она не сработала. "Не могу открыть таблицу 't'" Код ниже. Я знаю, что это некрасиво, но возвращает правильный набор данных.

Я немного очистил код и добавил код JOIN. Ошибка: «Не удается открыть таблицу« t »»

Table

enter code here
    DROP TABLE IF EXISTS `tmpMaxLookupResults`;

создать временную таблицу tmpMaxLookupResults в

SELECT 
REPORTS.dtmReportCompleted,
RESULTS.lngMainReport_ID, RESULTS.lngLocationGroupSub_ID
FROM
(tbl_010_040_ProcedureVsTest_Sub as ProcVsSub
INNER JOIN tbl_010_050_CheckLog_RESULTS as RESULTS 
ON (ProcVsSub.lngLocationGroupSub_ID = RESULTS.lngLocationGroupSub_ID)
AND (ProcVsSub.lngProcedure_ID = RESULTS.lngProcedure_ID)
AND (ProcVsSub.lngItemizedTestList_ID = RESULTS.lngItemizedTestList_ID)
AND (ProcVsSub.strPasscodeAdmin = RESULTS.strPasscodeAdmin)
AND (ProcVsSub.strCFICode = RESULTS.strCFICode))
INNER JOIN
tbl_000_010_MAIN_REPORT_INFO as REPORTS ON (RESULTS.lngPCC_ID = 
REPORTS.lngPCC_ID)
AND (RESULTS.lngProcedure_ID = REPORTS.lngProcedure_ID)
AND (RESULTS.lngMainReport_ID = REPORTS.idMainReport_ID)
AND (RESULTS.strPasscodeAdmin = REPORTS.strPasscodeAdmin)
AND (RESULTS.strCFICode = REPORTS.strCFICode)
WHERE
(((RESULTS.lngProcedure_ID) = 143)
AND ((RESULTS.dtmExpireDate) IS NOT NULL)
AND ((RESULTS.strCFICode) = 'ems'))
GROUP BY RESULTS.lngMainReport_ID, RESULTS.lngLocationGroupSub_ID
ORDER BY (REPORTS.dtmReportCompleted) DESC;


SELECT t.* 
FROM tmpMaxLookupResults AS t 
JOIN (
SELECT lngLocationGroupSub_ID, 
MAX(dtmReportCompleted) AS max_date_completed 
FROM tmpMaxLookupResults 
GROUP BY lngLocationGroupSub_ID ) AS dt 
ON dt.lngLocationGroupSub_ID = t.lngLocationGroupSub_ID AND 
dt.max_date_completed = t.dtmReportCompleted
enter code here

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

Попробуйте это

SELECT 
    tn.*
FROM 
    tableName tn
RIGHT OUTER JOIN 
    (
    SELECT 
        groupId, MAX(date_completed) as max_date_completed
    FROM 
        tableName 
    GROUP BY 
        groupId
    ) AS gt 
    ON 
        (gt.max_date_completed = nt.date_completed AND gt.groupId = nt.groupId)
0 голосов
/ 07 ноября 2018

Использование Заказ по

SELECT *
FROM table_name
ORDER BY your_date_column_name
DESC
LIMIT 1
0 голосов
/ 07 ноября 2018
  • В производной таблице получите максимальное значение date_completed для каждого group_id.
  • Присоедините этот набор результатов к основной таблице, чтобы получить полную строку, соответствующую максимальному значению date_completed для каждого group_id

Попробуйте следующий запрос:

SELECT t.* 
FROM your_table_name AS t 
JOIN (
      SELECT group_id, 
             MAX(date_completed) AS max_date_completed 
      FROM your_table_name 
      GROUP BY group_id 
     ) AS dt 
  ON dt.group_id = t.group_id AND 
     dt.max_date_completed = t.date_completed
0 голосов
/ 07 ноября 2018

Вы можете использовать следующий SQL.

select * from table1 order by date_completed desc Limit 1;
...