我正在写一个查询,想找出班上年龄第二大的女学生,道布是生日,因为时间戳、姓名和性别都是可变的。
SELECT min(DOB)
FROM Student
WHERE DOB > (SELECT min(DOB) FROM Student where gender='girl')
这是正确的吗?
发布于 2018-12-07 04:36:43
或者更简单:
SELECT DOB
FROM Student
WHERE gender='girl'
GROUP BY DOB
ORDER BY DOB ASC
LIMIT 1,1
道布的分组是指两个完全相同的DOB (双胞胎?)下一个最低的值是select。它可以在第二个相同的日期中省略,作为第二个最旧的日期。
发布于 2018-12-07 04:48:35
以下查询将为您提供所需的输出
WITH T AS
(
SELECT *
DENSE_RANK() OVER (ORDER BY DOB ) AS Rnk
FROM Student
WHERE gender='girl'
)
SELECT min(DOB)
FROM T
WHERE Rnk = 2;
您可以更改RNK值以获得下一个最旧的值,例如,对于第三旧的值,您可以使用WHERE Rnk = 3
发布于 2018-12-07 04:50:32
WITH myTableWithRows AS (
SELECT (ROW_NUMBER() OVER (ORDER BY Student.DOB)) as row,*
FROM Student )
SELECT * FROM myTableWithRows WHERE row = 2
我创建了这个假示例,查询结果如下:
或者,您也可以使用以下查询:
Select top 1 * from (select top 2 from Student order by dob desc) order by dob desc
https://stackoverflow.com/questions/53663286
复制相似问题