Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL统计不同的行数_Sql_Distinct - Fatal编程技术网

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