我创建了一个具有不同字段的表,即table_1
。我想写一个query
,以基于part_name1
的{{1}}从issue_priority
列中获取最新记录。 time
列可能包含具有不同优先级的相同记录,例如part_name1
,p1
或p2
。在这里,我减少了记录的数量,但是如果我没有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
答案 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