这是我的问题。Mariadb子查询中LIMIT的行为
我不擅长SQL查询,所以我希望能够对LIMIT子句的不同行为有所了解。我有两个疑问。可以说我的表有3列,name
,date
和date_modified
。我每小时修改一次表格,并使用date_modified
列对其进行修改。我试图获取针对特定日期2017-12-12
修改日期的最后一条记录(最近修改过)。
SELECT * from
(SELECT * from table where name in ('name1','name2','name3')
and date in ('2017-12-12') order by date_modified desc)
as tmp_table group by name
SELECT * from
(SELECT * from table where name in ('name1','name2','name3')
and date in ('2017-12-12') order by date_modified desc LIMIT 100)
as tmp_table group by name
第一个返回一个表格,其中修改日期是当天最早的记录。第二个是我想要的,它返回最新修改的数据。如果我有一个更大的表,其中name3
是第101条记录,则查询将无法正常工作。所以对LIMIT进行硬编码是不可行的,也是一种不好的做法。
为什么会有差异?按顺序通过在子查询中不工作?
*我只是在我自己想到解决方案时添加更多信息。
加上:上面的子查询具有相同的行为;即数据按照修改日期的降序排序。
date_modified
和date
都是日期时间格式。
查看内部查询中返回的内容。在'name3'是第101条记录的情况下,它是否表现得像预期的那样? –
yes内部查询按date_modified正确排序表。对不起,在代码中有一个错字。我只是修复它。我希望它现在更清晰 –
'SELECT * GROUP BY'是无效的SQL。您希望得到什么值不会出现在GROUP BY条款中?他们是不确定的。 – axiac