3

表格格式

id   time_stamp
3    2013-09-05 12:00:00
5    2013-09-06 12:00:00 
12   2013-09-07 12:00:00
2    2013-09-08 12:00:00
5    2013-09-09 12:00:00
8    2013-09-10 12:00:00

从上表中,我想在单个 mysql 选择查询语句中选择 min(id)、max(id)、last id、last time_stamp

需要的输出是:

min   max  last(val)  last(time_stamp)
2     12   8          2013-09-09 12:00:00

我使用了以下查询

select id, min(id),max(id), time_stamp from table order by time_stamp limit 1

我弄错了最新的 id 值 3 而不是 8

如果在 SQL fiddle
http://www.sqlfiddle.com/#!2/e9cb1/2/0下面检查这个

4

2 回答 2

8

这是一种使用substring_index()/group_concat()技巧的方法:

select min(id), max(id),
       substring_index(group_concat(id order by time_stamp desc), ',', 1) as lastid
from table ;
于 2013-09-11T18:54:05.217 回答
3

假设您在问题中错误地提到了 last(time_stamp) - 像往常一样获取最大值、最小值,然后找出子查询中的最后一个 id 和时间戳,然后您可以将其加入以将所有结果放在一行中。

SQL小提琴

MySQL 5.5.32 架构设置

create table t (id int, time_stamp datetime);

insert into  t values(3,    '2013-09-05 12:00:00');
insert into  t values(5,    '2013-09-06 12:00:00');
insert into  t values(12,   '2013-09-07 12:00:00');
insert into  t values(2,    '2013-09-08 12:00:00');
insert into  t values(5,    '2013-09-09 12:00:00');
insert into  t values(8,    '2013-09-10 12:00:00');

查询 1

SELECT MIN(t.id), MAX(t.id), latest.id, latest.time_stamp
FROM t  JOIN (
  SELECT t.id, t.time_stamp
  FROM t
  ORDER BY time_stamp DESC
  LIMIT 1) latest

结果

| MIN(T.ID) | MAX(T.ID) | ID |                       TIME_STAMP |
|-----------|-----------|----|----------------------------------|
|         2 |        12 |  8 | September, 10 2013 12:00:00+0000 |
于 2013-09-11T19:00:31.033 回答