在MySQL中选择最近添加的有价值记录

时间:2017-05-16 10:46:30

标签: mysql

我有一个包含以下结构的表

CREATE TABLE `data` (
  `type` varchar(64) DEFAULT NULL,
  `subscr_id` varchar(64) DEFAULT NULL
)

在此表中,有许多subscr_id id100的记录。我想选择subscr_id id100的{​​{1}}记录,该记录最近已添加到表格中。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您添加ID - 标识列。它/你的情况下表现最佳。

ALTER TABLE data ADD COLUMN id INT NULL AUTO_INCREMENT FIRST, ADD KEY(id); 

运行以下SQL,您将收到subscr_id为id100的记录,该记录最近一次被添加到表中。

SELECT * FROM `data` WHERE subscr_id = 'id100' ORDER BY id DESC LIMIT 1;

答案 1 :(得分:-1)

我认为您必须改进表格设计并添加自动生成primary keycreated_at字段。 但是如果你不能这样做或者你只需​​要运行一次查询,你可以尝试这种方法(它有点棘手,但它有效)。

一般来说,最近的记录将出现在表的末尾。例如,我们有这样的表:

+------+-----------+
| type | subscr_id |
+------+-----------+
| a    | id100     |
| b    | id100     |
| c    | id100     |
| a    | id200     |
| b    | id200     |
| d    | id100     |
| c    | id200     |
| e    | id100     |
+------+-----------+

这里我们需要计算有趣行的总数并将其用于偏移量,如下所示:

set @offset = (select count(*) from data where subscr_id = 'id100') - 1;
set @sql = concat(
    "select * from data where subscr_id = 'id100' limit 1 offset ",
    @offset
);
prepare stmt1 from @sql;
execute stmt1;

结果如下:

+------+-----------+
| type | subscr_id |
+------+-----------+
| e    | id100     |
+------+-----------+