mysql - 如何在mysql中选择按日期DESC排序并按字段分组的最后两条记录?
问题描述
我遇到了一个让我发疯的问题,我希望你们中的某个人可以帮助我。
我有一张桌子,我可以在其中存储一些来自 youtube 的视频。现在,对于我通过 youtube API 20 视频存储的每个频道。因此,如果我有 6 个频道,我将有 120 个视频。每个视频都有一种“时间戳”。我需要从这个表中提取最后两个视频,每个频道的publishAt 字段按DESC 排序。我尝试上传截图,但这不是我想要的。
有人可以帮助我吗?sql:版本5.5.60-MariaDB-Mysql 谢谢大家帮忙
这是我尝试了很长时间
SELECT publishedAt, channelId, channeltitle
FROM video_from_youtube a
WHERE a.id
IN (
SELECT MAX(t.id)
FROM video_from_youtube t
WHERE a.channelId = t.channelId
)
OR
a.id
IN (
SELECT MAX(t.id)
FROM video_from_youtube t
WHERE a.channelId = t.channelId AND
t.id NOT IN (
SELECT MAX(t2.id)
FROM video_from_youtube t2
WHERE t.channelId = t2.channelId
)
)
ORDER BY a.publishedAt DESC, a.id[enter image description here][1]
解决方案
尝试以下查询。子查询 v 是按通道和时间戳对数据进行排序。子查询 o 是为每个频道中的每个视频分配一个编号。此处需要会话变量。当频道发生变化时(@channel_id 为上一行的频道),编号从 1 开始。
SELECT o.publishedAt, o.channelId, o.channeltitle
FROM (
SELECT v.*,
(@video_order := CASE WHEN @channel_id = v.channelId THEN @video_order + 1 ELSE 1 END ) as row_num,
(@channel_id := v.channelId) AS channel_id
FROM (
SELECT t.publishedAt, t.channelId, t.channeltitle
FROM video_from_youtube t
ORDER BY t.channelId, t.publishedAt DESC) v
) o
WHERE o.row_num<=2;
推荐阅读
- wordpress - 木材加载 jQuery 的 http 版本导致混合内容问题?
- azure-devops - 希望在自托管代理上运行大门
- python - 图像变形场的 B 样条插值
- docker - Hyperledger Fabric - 无法使用四个 Kafka 和三个 Zookeeper Ensemble 启动网络
- sql - 需要在 T-SQL 中验证二进制数字的值
- mysql - 从另一个表中选择插入的mysql过程
- c++ - 无法找出以下程序中的错误
- python - 获取参数 None 的类型无效
当调用 tf.gradients - sharepoint-2013 - SharePoint 天气 Web 部件
- javascript - Qpid Broker-J Websocket 插件 AMQP 1.0