我创建了表。
CREATE TABLE test_tab(
ID INT,
FIRSTNAME VARCHAR(40),
TS TIMESTAMP)
并在其中插入值。
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (1, 'Jhon', '2018-06-05 00:11:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (2, 'Jhon', '2018-06-15 00:14:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (3, 'Jhon', '2018-06-19 00:10:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (4, 'Mike', '2018-06-05 00:10:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (5, 'Mike', '2018-06-15 00:10:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (6, 'Mike', '2018-06-20 00:10:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (7, 'Lis', '2018-06-05 00:13:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (8, 'Lis', '2018-06-15 00:17:56');
INSERT INTO test_tab (ID, FIRSTNAME, TS) VALUES (9, 'Lis', '2018-06-21 00:10:56');
我需要删除行,这样只有一个名字存在一行,留下最大TS的行。这是我的请求的例子。我如何删除它?
SELECT DISTINCT firstname
FROM test_tab
GROUP BY firstname
HAVING COUNT(firstname) > 1
union
select firstname from test_tab where ts = (select max(ts) from test_tab)
2条答案
按热度按时间r9f1avp51#
试试这个
| 识别码|姓名|技术支持|
| - -|- -|- -|
| 三个|琼|2018年6月19日00:10:56.000000|
| 六个|麦克|2018年6月20日00:10:5600万|
| 九个|利斯|2018年6月21日00:10:56.000000|
fiddle
m4pnthwp2#
只要与基础表存在双射,就可以从派生表中删除:
Fiddle