我有一个包含以下结构的表
CREATE TABLE `data` (
`type` varchar(64) DEFAULT NULL,
`subscr_id` varchar(64) DEFAULT NULL
)
在此表中,有许多subscr_id
id100
的记录。我想选择subscr_id
id100
的{{1}}记录,该记录最近已添加到表格中。
我该怎么做?
答案 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 key
或created_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 |
+------+-----------+