使用mysql从表中获取最新记录

时间:2018-11-07 02:21:09

标签: mysql max

这一定是没有道理的,但是我很沮丧。我习惯在MsAccess中使用聚合“ FIRST”,但是MySql没有这样的东西。 这是一个简单的表格。我想根据日期返回最近的记录, 每个唯一的“组ID”。我需要黄色的三个记录。

有人要求我添加完整的查询。我尝试了使用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 :(得分:0)

您可以使用以下SQL。

select * from table1 order by date_completed desc Limit 1;

答案 1 :(得分:0)

使用Order By

SELECT *
FROM table_name
ORDER BY your_date_column_name
DESC
LIMIT 1

答案 2 :(得分:0)

  • Derived Table中,获取每个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

答案 3 :(得分:0)

尝试一下

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)