如何将MySQL计数(*)与Order by子句和limit一起使用?

如何将MySQL计数(*)与Order by子句和limit一起使用?,mysql,Mysql,考虑下表 +-----+--------------+---------------------+ | id | account_name | date_time | +-----+--------------+---------------------+ | 123 | John | 2017-07-01 12:12:12 | +-----+--------------+---------------------+ | 124 | Henry

考虑下表

+-----+--------------+---------------------+
| id  | account_name | date_time           |
+-----+--------------+---------------------+
| 123 | John         | 2017-07-01 12:12:12 |
+-----+--------------+---------------------+
| 124 | Henry        | 2017-07-02 12:12:12 |
+-----+--------------+---------------------+
| 126 | Vlad         | 2017-07-03 12:12:12 |
+-----+--------------+---------------------+
在这里,如果我执行以下查询

从表中选择id\u name order by date\u time desc limit 0,1

我得到了输出(非常好)

现在,如果我执行查询

选择count(*),id来自表\u name ORDER BY date\u time DESC LIMIT 0,1

我得到输出

+-------+-----+
| count | id  |
+-------+-----+
| 3     | 123 |
+-------+-----+
<注意,在选择<代码>计数(*)< /代码>时,查询不考虑<代码>命令< /代码>。这里的问题是什么? 我希望得到以下回应

+-------+-----+
| count | id  |
+-------+-----+
| 3     | 126 |
+-------+-----+

您可以使用如下查询:

SELECT count(*), max(id) AS id
FROM table_name
ORDER BY id DESC
LIMIT 0,1;

您可以使用如下查询:

SELECT count(*), max(id) AS id
FROM table_name
ORDER BY id DESC
LIMIT 0,1;

让我们试试下面的语句:

SELECT (SELECT COUNT(*) FROM `table_name`) 'Count', id
  FROM `table_name`
  ORDER BY id DESC LIMIT 0,1;

让我们试试下面的语句:

SELECT (SELECT COUNT(*) FROM `table_name`) 'Count', id
  FROM `table_name`
  ORDER BY id DESC LIMIT 0,1;


MySQL任意选择126个(甚至不是随机选择)。这个问题没有用。@阿尔瓦罗冈萨雷斯,我明白了。那么,我们如何才能得到所需的结果呢?我认为您并没有真正解释所需结果背后的逻辑(按示例说明有其局限性)。是否要将总行数和对应于最大日期的ID放在同一行中?
date\u time
是一个唯一的索引吗?@lvaroGonzález我想要总计数加上一些条件(比如
其中status=1
)。但是我想要最新的条目(因此按日期\时间描述排序),不,日期\时间不是唯一的。两个id可以具有相同的
date\u time
,在这种情况下,我们可以按id排序,即
order by date\u time desc,id desc
MySQL可以任意(甚至不是随机)排序。这个问题没有用。@阿尔瓦罗冈萨雷斯,我明白了。那么,我们如何才能得到所需的结果呢?我认为您并没有真正解释所需结果背后的逻辑(按示例说明有其局限性)。是否要将总行数和对应于最大日期的ID放在同一行中?
date\u time
是一个唯一的索引吗?@lvaroGonzález我想要总计数加上一些条件(比如
其中status=1
)。但是我想要最新的条目(因此按日期\时间描述排序),不,日期\时间不是唯一的。两个id可以具有相同的
date\u time
,在这种情况下,我们可以按id订购,即
order by date\u time desc,id desc
等等,我必须更新问题。这将适用于样本表的当前问题,但是,
datetime
字段上的order by是什么?在这种情况下,
max(date\u time\u column\u name)
会起作用吗?我相信我们可以将
max(date\u time)
放在where子句中,但同样,如果有多条记录具有相同的日期时间,它也不会有帮助。是的,您应该将此答案与“SELECT count(*),max(date\u time)”@nacho,max(date\u time)一起使用这并不意味着这是最后一行等等,我必须更新这个问题。这将适用于样本表的当前问题,但是,
datetime
字段上的order by是什么?在这种情况下,
max(date\u time\u column\u name)
会起作用吗?我相信我们可以将
max(date\u time)
放在where子句中,但同样,如果有多条记录具有相同的日期时间,它也不会有帮助。是的,您应该将此答案与“SELECT count(*),max(date\u time)”@nacho,max(date\u time)一起使用这并不意味着这是最后一轮我认为这会奏效,让我试试。但是,你知道为什么它不能用一个简单的
select count(*),id
?或者你单独使用count(),或者使用count(),id+“group by”,如果我使用group by,它会给出每个组的计数,而不是完整的计数。你的解决方案确实有效,但我仍然想知道为什么
count(*)会出现这种情况
@ParthapratimNeog我不知道我对此的解释不清楚。由于没有
groupby
子句,因此没有足够的信息来确定要选择哪个
id
。所有其他数据库引擎(Oracle、SQL Server等)都会抛出一个错误。另一方面,MySQL的行为取决于它的设置(早期版本的默认设置是“选择任意一行并继续”)。我认为这会起作用,让我试试。但是,你知道为什么它不能用一个简单的
select count(*),id
?或者你单独使用count(),或者使用count(),id+“group by”,如果我使用group by,它会给出每个组的计数,而不是完整的计数。你的解决方案确实有效,但我仍然想知道为什么
count(*)会出现这种情况
@ParthapratimNeog我不知道我对此的解释不清楚。由于没有
groupby
子句,因此没有足够的信息来确定要选择哪个
id
。所有其他数据库引擎(Oracle、SQL Server等)都会抛出一个错误。另一方面,MySQL的行为取决于其设置(早期版本中的默认设置是“选择任意行并继续”)。