在上次MySQL更新后,我一直在寻找一种方法来纠正我的查询。我知道Group By列不是唯一的,但我不知道如何更新查询以遵守严格的规则,并且仍然保留我要查找的结果。有人有什么建议吗?
SELECT
$SQLTable_Posts.`post_id`,
$SQLTable_Posts.`profile_id`,
$SQLTable_Posts.`post_title`,
$SQLTable_Posts.`post_slug`,
$SQLTable_Posts.`post_date`
FROM $SQLTable_Posts
WHERE $SQLTable_Posts.`post_date` > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY $SQLTable_Posts.`profile_id`
ORDER BY $SQLTable_Posts.`post_date` DESC
我想简单地返回每个配置文件所做的最新帖子。例如,我的数据库看起来是这样的;
<table><tbody><tr><th>post_id</th><th>profile_id post_date</th><th> </th></tr><tr><td>0001</td><td>0001</td><td>2019-03-12 00:00:00</td></tr><tr><td>0002</td><td>0002</td><td>2019-03-12 00:00:00</td></tr><tr><td>0003</td><td>0001</td><td>2019-03-12 01:00:00</td></tr><tr><td>0004</td><td>0004</td><td>2019-03-12 00:00:00</td></tr></tbody></table>
<table><tbody><tr><th>post_id</th><th>profile_id post_date</th><th> </th></tr><tr><td>0003</td><td>0001</td><td>2019-03-12 01:00:00</td></tr><tr><td>0002</td><td>0002</td><td>2019-03-12 00:00:00</td></tr><tr><td>0004</td><td>0004</td><td>2019-03-12 00:00:00</td></tr></tbody></table>
我想简单地返回每个配置文件所做的最新帖子。
要做到这一点,一种不与group by
混在一起的方法是使用带有not exists
条件的相关子查询,以确保所选的每条记录都是具有相同profile_id
的每组记录中最近的一条(我使用列post_date
对记录进行排序):
SELECT
`post_id`,
`profile_id`,
`post_title`,
`post_slug`,
`post_date`
FROM $SQLTable_Posts p
WHERE
`post_date` > DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND NOT EXISTS (
SELECT 1
FROM $SQLTable_Posts p1
WHERE p1.`profile_id` = p.`profile_id` AND p1.`post_date` > p.`post_date`
)
ORDER BY `post_date` DESC
注意:我简化了查询,删除了冗长的表前缀,这里不需要这些前缀(和/或可以用短表别名替换)。
如果您碰巧使用的是MySQL8.0,那么使用row_number()
,这就很简单了:
SELECT *
FROM (
SELECT
`post_id`,
`profile_id`,
`post_title`,
`post_slug`,
`post_date`,
ROW_NUMBER() OVER(PARTITION BY `profile_id` ORDER BY `post_date` DESC) rn
FROM $SQLTable_Posts p
WHERE `post_date` > DATE_SUB(NOW(), INTERVAL 24 HOUR)
) x WHERE rn = 1
ORDER BY `post_date` DESC
查询: 有人有解决办法吗?
SQL在sql_mode=ONLY_FULL_GROUP_BY中遇到了一些问题,如何重写这个SQL?
问题内容: 我有一个基本的键值表,其中包含每个用户的一些数据。使用更新的mysql进行分组时,其设置为(新的默认值)。当我尝试运行此简单查询时: 我收到以下错误: SQL错误(1055):SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列’date.user_features.user_id’,该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = onl
我正在从 elasticsearch 0.90.10 和 NEST 0.12.0 升级到 elasticsearch 1.3.4 和 NEST 1.1.2,并且我正在尝试用函数分数查询替换在 0.90.4 中已弃用的自定义分数查询。 这是我的旧代码: 这是我的新代码: 新代码在使用 SearchParseException 时失败,这是查询(来自.log文件): 完整日志条目: 如果我像这样省略
传输{收集} TransportationID{document} TransportationName:“Private Transaportation” 汽车{收藏} Carid{document} Carname:“Taxi” 车辆名称:“私人出租车” 在集合中,我有超过100辆汽车(文档)。我在文档中或stackoverflow上都找不到如何获取名称具有特定值的所有运输名称。对此如何解决?
OTA更新查询与下载 获取access_token 终端设备 终端设备直接接入OTA服务器应当使用Client Credentials模式,client_id为设备id,client_serect为设备令牌. App接入 如果终端设备无法直接接入OTA服务器,而通过App中转,那么App应当也使用Client Credentials模式,client_id为app_id,client_secret