SELECT
video_category,
video_url,
video_date,
video_title,
short_description,
MAX(video_id)
FROM
videos
GROUP BY
video_category
当它拉出数据时,我会为video_id获得正确的行,但是它为其他类别的第一行拉了第一行。因此,当我获得类别1的Video_ID的最大结果时,我获得了最大ID,但是表格中的第一行,日期,标题和描述。
如何将其拉动与最大ID结果相对应的其他列?
Edit:固定SELECT
*
FROM
videos
WHERE
video_id IN
(
SELECT
DISTINCT
MAX(video_id)
FROM
videos
GROUP BY
video_category
)
ORDER BY
video_category ASC
SELECT
s.video_id
,s.video_category
,s.video_url
,s.video_date
,s.video_title
,s.short_description
FROM videos s
JOIN (SELECT MAX(video_id) AS id FROM videos GROUP BY video_category) max
ON s.video_id = max.id
我最近发明了一种新技术来模拟MySQL中的窗口功能。我称其为标量 - 聚集减少。
迄今为止,这是实现此目的的最高绩效方法和最简单的方法(用DB发动机术语),因为它不需要连接,不需要连接,也没有CTE。对于您的查询,它看起来像这样:
SELECT
video_category,
MAX(video_id) AS video_id,
SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), video_url)), 12) AS video_url,
SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), video_date)), 12) AS video_date,
SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), video_title)), 12) AS video_title,
SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), short_description)), 12) AS short_description
FROM
videos
GROUP BY
video_category
lpads内部相关的标识符以允许正确的字符串比较(例如“ 0009”和“ 0025”,将适当排名)。 我在这里假设一个int主键,我要在这里使用11个字符。 如果您使用bigint,则需要增加它以支持桌子的法令。 如果您要在DateTime字段(固定长度)上进行比较,则无需填充。
将带填充的标识符与输出列结合在一起(因此您将获得“ 00000000009MyValue” vs“ 0000000025 hothervalue”)MAX总套件,将产生“ 00000000025渗透价”作为获胜者。
结果,结果将截断比较的标识符部分,仅留下值。
如果您想在char以外的其他类型中检索值,则可能需要对输出进行额外的铸件,例如如果您想成为日期时间:
video_date
CAST(SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), video_date)), 12) AS DATETIME)
稍微“质朴”的解决方案,但应该做同样的工作:
SELECT
-- Overall totals
video_category,
COUNT(1) AS videos_in_category,
DATEDIFF(MAX(video_date), MIN(video_date)) AS timespan,
-- Last video details
MAX(video_id) AS last_video_id,
SUBSTRING(MAX(CONCAT(LPAD(video_id, 11, '0'), video_url)), 12) AS last_video_url,
...
-- First video details
MIN(video_id) AS first_video_id,
SUBSTRING(MIN(CONCAT(LPAD(video_id, 11, '0'), video_url)), 12) AS first_video_url,
...
-- And so on
HERRE是一种更通用的解决方案(处理重复)
SELECT
video_category,
video_url,
video_date,
video_title,
short_description,
video_id
FROM
videos
ORDER BY video_id DESC
LIMIT 1;
选择video_category,video_url,video_date,video_title,short_description,video_id
来自视频T1
where video_id in(从视频中选择max(video_id)t2中的t1.video_category = t2.video_category);