根据列选择最新的时间戳
Selecting latest timestsamp based on column
我有一个问题:
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'
ORDER BY ti.tester_name
在我选择的 table table TBL_TESTER_ONLINE_INFO
中,有一个名为 last_checked
的列用于保存记录的时间戳。时间戳都不同。
但是在这个table中有一列可以包含重复的记录,即tester_name
。所以我可以有 test1
和 test1
但两者都有不同的时间戳。
示例:
tester_name last_checked
test1 2015-07-30 03:56:51
test1 2015-07-31 05:56:38
test2 2015-07-31 10:10:36
test2 2015-07-31 02:27:12
我只想获取最新的时间戳。所以我想要得到的输出示例是
tester_name last_checked
test1 2015-07-31 05:56:38
test2 2015-07-31 02:27:12
我不确定如何修改我正在使用的查询,我试过 group by last_checked
但显然这是错误的方法。我已经看到其他使用内部联接的答案
SELECT ti.*
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO ti
INNER join
(
SELECT id, max(last_checked) as mts
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO
GROUP BY id
) s2 on s2.id = ti.id and ti.last_checked = s2.mts
INNER JOIN TBL_TESTER_LIST tl
ON ti.tester_name = tl.tester_name
WHERE ti.board_name = 'DC30'
AND tl.tester_type = 'UFLEX'
ORDER BY ti.tester_name
但它 returns 与未修改的查询相同的行(有重复项)。
有什么帮助吗?
P.S。 table 当然还有更多列,但插图只是为了显示此问题中的一个简单示例。
编辑:TBL_TESTER_ONLINE_CONFIG样本数据
id tester_name frame board_name config part_no, serial_no, license_count, legal_enabling last_checked log_name
'105318' 'UFLEX-02' 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 00:35:15' 'IGXLEventLog.7.30.2015.00.34.21.000.log'
'105048' 'UFLEX-02', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-29 15:31:42' 'IGXLEventLog.7.29.2015.15.30.46.344.log'
'109709' 'UFLEX-05', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 05:10:16' 'IGXLEventLog.7.30.2015.05.09.45.515.log'
'108802' 'UFLEX-05', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 01:34:08' 'IGXLEventLog.7.30.2015.01.33.36.891.log'
忽略除 tester_name
列和 last_checked
列之外的所有内容。只是想确保我只得到一个测试员的名字。如果该信息有帮助,我正在为 Web 应用程序(在 PHP 中)执行此操作以获得特定的测试人员。
您可以直接使用 max(last_checked)
函数来检查最新的时间戳并使用 GROUP BY tester_name
这样它会给您不同的值。尝试以下查询:
SELECT ti.tester_name, MAX(ti.last_checked)
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'
GROUP BY ti.tester_name
ORDER BY ti.tester_name
我只添加了两个字段,你可以根据需要添加。
我有一个问题:
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'
ORDER BY ti.tester_name
在我选择的 table table TBL_TESTER_ONLINE_INFO
中,有一个名为 last_checked
的列用于保存记录的时间戳。时间戳都不同。
但是在这个table中有一列可以包含重复的记录,即tester_name
。所以我可以有 test1
和 test1
但两者都有不同的时间戳。
示例:
tester_name last_checked
test1 2015-07-30 03:56:51
test1 2015-07-31 05:56:38
test2 2015-07-31 10:10:36
test2 2015-07-31 02:27:12
我只想获取最新的时间戳。所以我想要得到的输出示例是
tester_name last_checked
test1 2015-07-31 05:56:38
test2 2015-07-31 02:27:12
我不确定如何修改我正在使用的查询,我试过 group by last_checked
但显然这是错误的方法。我已经看到其他使用内部联接的答案
SELECT ti.*
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO ti
INNER join
(
SELECT id, max(last_checked) as mts
FROM New_OTPMS.TBL_TESTER_ONLINE_INFO
GROUP BY id
) s2 on s2.id = ti.id and ti.last_checked = s2.mts
INNER JOIN TBL_TESTER_LIST tl
ON ti.tester_name = tl.tester_name
WHERE ti.board_name = 'DC30'
AND tl.tester_type = 'UFLEX'
ORDER BY ti.tester_name
但它 returns 与未修改的查询相同的行(有重复项)。
有什么帮助吗?
P.S。 table 当然还有更多列,但插图只是为了显示此问题中的一个简单示例。
编辑:TBL_TESTER_ONLINE_CONFIG样本数据
id tester_name frame board_name config part_no, serial_no, license_count, legal_enabling last_checked log_name
'105318' 'UFLEX-02' 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 00:35:15' 'IGXLEventLog.7.30.2015.00.34.21.000.log'
'105048' 'UFLEX-02', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-29 15:31:42' 'IGXLEventLog.7.29.2015.15.30.46.344.log'
'109709' 'UFLEX-05', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 05:10:16' 'IGXLEventLog.7.30.2015.05.09.45.515.log'
'108802' 'UFLEX-05', 'LICENSE_ENABLERS' 'DC30' '1' ' ' ' ' 'N/A' '1,0' '2015-07-30 01:34:08' 'IGXLEventLog.7.30.2015.01.33.36.891.log'
忽略除 tester_name
列和 last_checked
列之外的所有内容。只是想确保我只得到一个测试员的名字。如果该信息有帮助,我正在为 Web 应用程序(在 PHP 中)执行此操作以获得特定的测试人员。
您可以直接使用 max(last_checked)
函数来检查最新的时间戳并使用 GROUP BY tester_name
这样它会给您不同的值。尝试以下查询:
SELECT ti.tester_name, MAX(ti.last_checked)
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'
GROUP BY ti.tester_name
ORDER BY ti.tester_name
我只添加了两个字段,你可以根据需要添加。