SQL统计不同的行数
有下表的SQL统计不同的行数,sql,distinct,Sql,Distinct,有下表的 Date Direction Market Time 10/17/2016 SB GRUJFK 22:05:00 10/18/2016 SB GRUJFK 22:05:00 10/19/2016 SB GRUJFK 22:05:00 10/20/2016 SB GRUJFK 22:05:00 10/21/2016 SB GRUJFK 22:05:00 10/23/2016 SB GRUJFK
Date Direction Market Time
10/17/2016 SB GRUJFK 22:05:00
10/18/2016 SB GRUJFK 22:05:00
10/19/2016 SB GRUJFK 22:05:00
10/20/2016 SB GRUJFK 22:05:00
10/21/2016 SB GRUJFK 22:05:00
10/23/2016 SB GRUJFK 23:20:00
10/23/2016 SB GRUJFK 22:30:00
10/24/2016 SB GRUJFK 22:30:00
10/25/2016 SB GRUJFK 22:30:00
10/26/2016 SB GRUJFK 22:30:00
10/27/2016 SB GRUJFK 22:30:00
10/28/2016 SB GRUJFK 22:30:00
我想在不同的列中计算不同的行,但按顺序为重复的行分配一个数字(从1..n)
因此,在这种情况下,只有10/23/2016有3个不同的值。因此,将1指定给第一个引用,将2指定给第二个引用,以此类推
我尝试了以下方法
select
departureDate,
DIRECTION, LEG, SCHD_LEG_DEP_TM, count(SCHD_LEG_DEP_TM) over (partition by departureDate)
from table3mirs mirs
INNER JOIN sys_calendar.calendar
ON calendar_date = mirs.departureDate
where leg='GRUJFK'
group by 1,2,3,4
但是得到
Date Direction Market Time Count
10/17/2016 SB GRUJFK 22:05:00 1
10/18/2016 SB GRUJFK 22:05:00 1
10/19/2016 SB GRUJFK 22:05:00 1
10/20/2016 SB GRUJFK 22:05:00 1
10/21/2016 SB GRUJFK 22:05:00 1
10/23/2016 SB GRUJFK 23:20:00 3
10/23/2016 SB GRUJFK 22:30:00 3
10/23/2016 SB GRUJFK 23:30:00 3
10/25/2016 SB GRUJFK 22:30:00 1
10/26/2016 SB GRUJFK 22:30:00 1
10/27/2016 SB GRUJFK 22:30:00 1
10/28/2016 SB GRUJFK 22:30:00 1
有什么想法吗?谢谢你的帮助 如果您使用的是MSSQL(我想您可能会得到分区),您可以试试这个
select
departureDate,
DIRECTION, LEG, SCHD_LEG_DEP_TM, count(DISTINCT SCHD_LEG_DEP_TM) over (partition by departureDate)
from table3mirs mirs
INNER JOIN sys_calendar.calendar
ON calendar_date = mirs.departureDate
where leg='GRUJFK'
group by 1,2,3,4
看起来你只是需要排号
SELECT departureDate ,
DIRECTION ,
LEG ,
SCHD_LEG_DEP_TM ,
ROW_NUMBER() OVER ( PARTITION BY departureDate ORDER BY SCHD_LEG_DEP_TM )
FROM table3mirs mirs
INNER JOIN sys_calendar.calendar ON calendar_date = mirs.departureDate
WHERE leg = 'GRUJFK'
GROUP BY 1 ,
2 ,
3 ,
4
抱歉,您不能在窗口函数中使用count distinct。
SELECT departureDate ,
DIRECTION ,
LEG ,
SCHD_LEG_DEP_TM ,
ROW_NUMBER() OVER ( PARTITION BY departureDate ORDER BY SCHD_LEG_DEP_TM )
FROM table3mirs mirs
INNER JOIN sys_calendar.calendar ON calendar_date = mirs.departureDate
WHERE leg = 'GRUJFK'
GROUP BY 1 ,
2 ,
3 ,
4