SQL查询验证-简单

时间:2018-12-07 04:30:56

标签: mysql sql database

我正在尝试编写查询以查找班上第二大女学生 DOB是出生日期作为时间戳 名字和性别都是varchar

SELECT min(DOB)
FROM Student
WHERE DOB > (SELECT min(DOB) FROM Student where gender='girl')

这正确吗?

3 个答案:

答案 0 :(得分:2)

或更简单:

SELECT DOB
FROM Student
WHERE gender='girl'
GROUP BY DOB
ORDER BY DOB ASC
LIMIT 1,1

按DOB分组意味着选择下一个最低的两个相同的DOB(双胞胎?)。可以在第二个相同的日期(最早的一个)中将其省略。

答案 1 :(得分:0)

以下查询将为您提供所需的输出

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

答案 2 :(得分:0)

    WITH myTableWithRows AS (
    SELECT (ROW_NUMBER() OVER (ORDER BY   Student.DOB)) as row,*
    FROM Student )
    SELECT * FROM myTableWithRows WHERE  row = 2

我创建了这个伪造的示例,查询结果如下:

Table and query result

或者您也可以使用以下查询:

 Select top 1 * from (select top 2 from    Student order by dob desc) order by dob desc