【问题标题】:Selecting row with latest timestamp MySQL with Duplicates选择具有最新时间戳的行 MySQL with Duplicates
【发布时间】:2015-08-03 06:42:51
【问题描述】:

我正在尝试选择具有最新时间戳的行。以下是表格示例:

+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+
| id     | tester_name | frame            | board_name | config | part_no | serial_no | license_count | legal_enabling | last_checked        | log_name                                |
+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+ 
| 162936 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 6      | 974-331-44 | 302501d   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162937 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 7      | 974-331-44 | c0165ec   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162938 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 8      | 974-331-44 | c13100e   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162939 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 9      | 974-331-44 | 302c919   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162941 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 14     | 974-331-44 | c00b41b   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162942 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 15     | 974-331-44 | c13101e   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162943 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 16     | 974-331-44 | 3014a1b   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 162944 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 17     | 974-331-44 | 302cc7e   |               |                | 2015-08-01 19:48:48 | IGXLEventLog.8.1.2015.19.48.15.054.log  |
| 166555 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 6      | 974-331-44 | 302501d   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166556 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 7      | 974-331-44 | c0165ec   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166557 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 8      | 974-331-44 | c13100e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166558 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 9      | 974-331-44 | 302c919   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166560 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 14     | 974-331-44 | c00b41b   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166561 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 15     | 974-331-44 | c13101e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166562 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 16     | 974-331-44 | 3014a1b   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166563 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 17     | 974-331-44 | 302cc7e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log | 
+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+

我用来获取上述内容的查询是

SELECT ti.* 
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO ti 
INNER JOIN TBL_TESTER_LIST tl 
ON ti.tester_name = tl.tester_name 
WHERE ti.board_name = 'HSD-M' 
AND tl.tester_type = 'UFLEX' 
AND ti.tester_name = 'UFLEX-10' 
ORDER BY ti.tester_name;

如您所见,它只是从表中获取所有内容。我只想获取基于最新时间戳的行。注意:不是一行具有最新时间戳,而是基于config 的非重复行,具有相同的最新时间戳。

我想要的最新/行是

+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+
| id     | tester_name | frame            | board_name | config | part_no | serial_no | license_count | legal_enabling | last_checked        | log_name                                |
+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+
| 166555 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 6      | 974-331-44 | 302501d   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166556 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 7      | 974-331-44 | c0165ec   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166557 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 8      | 974-331-44 | c13100e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166558 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 9      | 974-331-44 | 302c919   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166560 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 14     | 974-331-44 | c00b41b   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166561 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 15     | 974-331-44 | c13101e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166562 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 16     | 974-331-44 | 3014a1b   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
| 166563 | UFLEX-10    | TEST_HEAD TH 1 | HSD-M      | 17     | 974-331-44 | 302cc7e   |               |                | 2015-07-29 02:32:39 | IGXLEventLog.7.29.2015.02.32.05.475.log |
+--------+-------------+------------------+------------+--------+---------+-----------+---------------+----------------+---------------------+-----------------------------------------+

有什么帮助吗?

编辑:我已经编辑了上面的数据,使其与问题相对应。

【问题讨论】:

  • 这是mysql标签下最常见的问题。

标签: mysql sql timestamp


【解决方案1】:

试试这个

SELECT ti.*
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO ti
INNER JOIN TBL_TESTER_LIST tl
ON ti.tester_name = tl.tester_name
WHERE ti.board_name = 'DC30'
AND tl.tester_type = 'UFLEX'
AND ti.tester_name = 'UFLEX-10'
AND ti.last_checked = (
    SELECT MAX(last_checked) 
    FROM New_OTPMS.TBL_TESTER_ONLINE_INFO
    WHERE
        board_name = 'DC30'
        AND tester_name = 'UFLEX-10'    
)

【讨论】:

  • 这行得通,但如果我有不同的config 号码但有相同的last_checked 或又名最新时间怎么办?我想得到所有这些。例如,11617,但都具有相同的最新时间戳。我如何获得全部?
  • 我尝试了你的新答案,它会返回旧结果而不是带有最新时间戳的行。
  • 这次不返回任何内容
  • 在“最新/我想要的行”附近更新您的问题,应该不是 2015-07-29 02:32:39,而是 2015-08-01 19:48:48 ?
  • 太好了,正是我想要的。最后一个问题,如果我必须查询许多不同的tester_name 怎么办?我是否像您的答案中那样使用选择?或者我应该做一个单独的查询(我正在使用 PHP)并只使用这个查询来遍历每个 tester_name
【解决方案2】:
SELECT ti.*
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO ti
INNER JOIN TBL_TESTER_LIST tl
ON ti.tester_name = tl.tester_name
WHERE ti.board_name = 'DC30'
AND tl.tester_type = 'UFLEX'
AND ti.tester_name = 'UFLEX-10'
ORDER BY ti.last_checked DESC LIMIT 1;

上面的 sql 应该可以工作。您的原始 sql 按名称而不是时间排序。如果您只想要最新的一行,您可以在末尾添加 LIMIT 1。

【讨论】:

  • 这仍然给了我旧行
  • 尝试将 DESC 更改为 ASC 并删除 GROUP BY
  • 我可以知道返回的是哪一行吗?
  • 我不想要的那个,ID 是 98965。我看到你已经改变了答案。这确实会采用最新的,但是,如果我有几个不同的 config 数字具有相同的时间戳(最新)而不是所有 1 怎么办?我想得到所有不同的config。那么查询会怎样呢?
  • 尝试添加“GROUP BY ti.config”并删除 LIMIT 1
猜你喜欢
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2014-02-06
  • 2014-01-16
  • 2017-03-25
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
相关资源
最近更新 更多