1

我试图显示从出生日期列计算的每个年龄的计数,但问题是它只会按出生日期分组,因此显示了很多重复的年龄。这是我的查询:

SELECT 
    DATEDIFF(hh, p.p_dob, GETDATE())/8766 AS Age,
    COUNT(DISTINCT s.s_studentreference) AS 'Count'    
FROM 
    moduleenrolment e
INNER JOIN 
    module m ON m.m_id = e.e_module
INNER JOIN 
    person p ON p.p_id = e.e_student
INNER JOIN 
    student s ON s.s_id = p.p_id
WHERE 
    m.m_reference LIKE '11%'
    AND LEN(m.m_reference) <= 12
    AND e.e_status IN ('A', 'W', 'C')
GROUP BY 
    p.p_dob
ORDER BY 
    p.p_dob DESC

这是结果的示例

12  1
13  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1
14  1

我一直在寻找的是

12 1
13 1
14 9
4

5 回答 5

5

Group by 和 order byDATEDIFF(hh, p.p_dob, GETDATE())/8766而不是p.p_dob

通过分组p.p_dob,您实际上是按唯一出生日期而不是计算年龄分组。

于 2013-01-24T14:45:46.980 回答
1

如果在您使用的 SQL Server 版本上可用,请检查 RANK()/DENSE_RANK() 函数。它将帮助您在年龄组中排名。您按年龄对查询进行分区并对其进行排名。相同的年龄将具有相同的等级,lk 所有年龄为 14 的行将始终具有等级 1、15 - 等级 2 等...

于 2013-01-24T14:50:14.693 回答
0

您是按实际出生日期分组,而不是按年龄分组。不确定它是否会起作用,但请尝试将您的计算放在您的 group by 语句中

于 2013-01-24T14:47:47.873 回答
0

你可以尝试这样的事情:

SELECT TRUNC (MONTHS_BETWEEN (SYSDATE, SS.DATE_OF_BIRTH) / 12)
from (YOUR TABLE) SS

于 2013-05-07T08:00:49.680 回答
-1

有时您的日期函数在您的 Oracle 数据库中不起作用。那个时候你不要惊慌;试试这个:

SELECT * FROM
   (SELECT CEIL(ROUND(SYSDATE - HIRE_DATE)/365.22) AS AGE , HIRE_DATE
    FROM EMP_DUPLICATE WHERE EMP_ID = 100 )
于 2016-12-20T18:59:51.660 回答