Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
行号Sybase SQL Anywhere在多个条件下更改_Sql_Date_Window Functions_Row Number_Sybase Asa - Fatal编程技术网

行号Sybase SQL Anywhere在多个条件下更改

行号Sybase SQL Anywhere在多个条件下更改,sql,date,window-functions,row-number,sybase-asa,Sql,Date,Window Functions,Row Number,Sybase Asa,我有一个选择返回 EMP DOC DATE 1 78 01/01 1 96 02/01 1 96 02/01 1 105 07/01 2 4 04/01 2 7 04/01 3 45 07/01 3 45 07/01 3 67 09/01 我想添加一个行号(我会将其用作主id),但我希望它在“EMP”更改时始终更改,并且在文档与前一个相同时也不会更改,如: EMP DOC DATE ID 1 78 01/01 1 1

我有一个选择返回

EMP DOC  DATE
  1  78 01/01
  1  96 02/01
  1  96 02/01
  1 105 07/01
  2   4 04/01
  2   7 04/01
  3  45 07/01
  3  45 07/01
  3  67 09/01
我想添加一个行号(我会将其用作主id),但我希望它在“EMP”更改时始终更改,并且在文档与前一个相同时也不会更改,如:

EMP DOC  DATE  ID
  1  78 01/01   1
  1  96 02/01   2
  1  96 02/01   2
  1 105 07/01   3
  2   4 04/01   1
  2   7 04/01   2
  3  45 07/01   1
  3  45 07/01   1
  3  67 09/01   2
在SQL Server中,我可以使用
LAG
来比较以前的文档,但我似乎找不到进入SYBASE SQL Anywhere的方法,我使用
行数
来按“EMP”划分分区,但这不是我需要的

SELECT EMP, DOC, DATE, ROW_NUMBER() OVER (PARTITION BY EMP ORDER BY EMP, DOC, DATE) ID -- <== THIS WILL CHANGE THE ROW NUMBER ON SAME DOC ON SAME EMP, SO WOULD NOT WORK.

选择EMP,DOC,DATE,ROW_NUMBER()(按EMP顺序划分,按EMP,DOC,DATE)ID--您希望
密集排列()


这将对组中具有相同
emp
的行进行编号,并且仅当
日期更改时才递增,没有间隔。

如果性能不是您的问题,您可以尝试以下操作:

SELECT tx.EMP, tx.DOC, tx.DATE, y.ID
   FROM table_xxx tx
     join y on tx.EMP = y.EMP and tx.DOC = y.DOC
(SELECT EMP, DOC, ROW_NUMBER() OVER (PARTITION BY EMP ORDER BY DOC) ID
   FROM(SELECT EMP, DOC FROM table_xxx GROUP BY EMP, DOC)x)y

快速简单,不知道为什么我没有尝试过(对行数是盲目的),但它工作得很好(我现在会更好地研究这个函数)。我使用了按单据和日期排序,因为我可以对多个单据使用相同的日期。太多了!
SELECT tx.EMP, tx.DOC, tx.DATE, y.ID
   FROM table_xxx tx
     join y on tx.EMP = y.EMP and tx.DOC = y.DOC
(SELECT EMP, DOC, ROW_NUMBER() OVER (PARTITION BY EMP ORDER BY DOC) ID
   FROM(SELECT EMP, DOC FROM table_xxx GROUP BY EMP, DOC)x)y