如何编写查询以从数据库表中获取最新记录

时间:2019-04-30 10:00:42

标签: mysql database

我创建了一个具有不同字段的表,即table_1。我想写一个query,以基于part_name1的{​​{1}}从issue_priority列中获取最新记录。 time列可能包含具有不同优先级的相同记录,例如part_name1p1p2。在这里,我减少了记录的数量,但是如果我没有n条记录,那么如何在插入的记录中获取最新的记录。

这里只是一个例子。请查看给定的图片链接

p3

输出:在上表中,我希望输出如下所示

**part_name1**      **issue_priority**    **time1**

    blower              p1                 03:15:00
    reverse             p2                 03:16:18
    blower              p2                 04:11:30
    reverse             p3                 04:44:05

image link

4 个答案:

答案 0 :(得分:1)

首先,您需要查询每个part_name1的最新时间。这样可以为您提供最大时间值。

SELECT part_name1, max(time1) as maxtime1
FROM table_1
GROUP BY part_name1;

如果您还需要表中的其他数据(例如issue_priority),则应将以上数据用作子查询:

SELECT t1.*
FROM table_1 t1
JOIN (
    SELECT part_name1, max(time1) as maxtime1
    FROM table_1
    GROUP BY part_name1 ) s1
ON (t1.part_name1  = s1.part_name1 AND t1.time1 = s1.maxtime1);

这将为您返回每个part_name1的最新行。如果需要,可以添加其他LIMIT子句。

答案 1 :(得分:1)

使用max(time1)而不是min(time1)来获取最新插入的记录。

File storeFile = new File("pure-ftpd.jks");
KeyStore keystore = loadKeyStore("JKS", storeFile, "password");
X509TrustManager defaultTM = TrustManagerUtils.getDefaultTrustManager(keystore);
String[] TLSversions = new String[]{"TLSv1.2"};
FTPSClient ftpTLS = new FTPSClient("SSL", false);
ftpTLS.setEnabledProtocols(TLSversions);
ftpTLS.setTrustManager(defaultTM);
ftpTLS.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
ftpTLS.setRemoteVerificationEnabled(true);
ftpTLS.setDefaultPort(21);
ftpTLS.connect("127.0.0.1", 21);

答案 2 :(得分:0)

您只需要使用ORDER BY:

SELECT fields FROM table ORDER BY time1 DESC LIMIT 2;

在您的情况下,字段是part_name1,表是表的名称,而LIMIT 2是因为您恰好需要最后2条记录(可以设置为任何数字)。

答案 3 :(得分:0)

您可以使用ORDER BY

SELECT part_name1, issue_priority
FROM table_1
ORDER BY time1 DESC
LIMIT 2

限制2将为您提供两个最新记录。如果删除LIMIT,则将获得time1排序的最新到最旧记录。

https://dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html