2016-06-21 3 views
0

Мы пытаемся ранжировать колонку счетов и хотим только первую доставку счетов-фактур между частями счетов-фактур.SQL Query: как использовать столбец Timestamp среди рангов Значения столбца

То есть в этой колонке у нас есть несколько счетов-фактур. Мы хотели бы выбрать эту группу счетов-фактур среди рангов рангов, которые состоят из самой ранней отметки времени.

Природа TimeStamp Колонка:

Сервер тип временной метки данных SQL не имеет ничего общего со временем или даты, это просто двоичное число, чтобы указать столбец sequence.The метка записывается и увеличивается каждый раз запись добавлена.

Мы пытались следующий запрос:

select * 
from 
    (select 
     myrank = rank() over (partition by a.SalesOrder order by c.Invoice), 
     c.Invoice, c.TimeStamp 
    from 
     OrderDetail a 
    left join 
     OrderMaster b on a.SalesOrder = b.SalesOrder 
    left join 
     InvoiceDetail c on a.SalesOrder = c.SalesOrder 
         and a.SalesOrderLine = c.SalesOrderLine 
    where 
     a.SalesOrder = '218438' 
     and c.LineType = '1' 
     and b.OrderStatus = '9') z 

Образец данных:

myrank | SalesOrder | SalesOrderLine |Invoice | TimeStamp 
1 218438 8 207964 0x0000000048CD8CD4 
2 218438 1 207965 0x0000000048CD8CD5 
2 218438 2 207965 0x0000000048CD8CD6 
2 218438 3 207965 0x0000000048CD8CD7 
2 218438 4 207965 0x0000000048CD8CD8 
2 218438 5 207965 0x0000000048CD8CD9 
2 218438 6 207965 0x0000000048CD8CDA 
2 218438 7 207965 0x0000000048CD8CDB 

Ожидаемые данные:

запись должна быть причисляют первого счета отгрузки и первый Добавлена ​​запись о основа временной отметки Что должно быть о utput Если я выбираю 2 в качестве ранга

myrank | SalesOrder | SalesOrderLine |Invoice | TimeStamp 
    1 218438 8 207964 0x0000000048CD8CD4 

Заранее благодарен!

+1

Как насчет определения таблицы в качестве отправной точки? Поскольку мы догадываемся о том, что вы пытаетесь сделать здесь. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

Фактически тип данных «timestamp» также изменяется каждый раз, когда вы обновляете запись. Это означает решение для параллелизма путем управления версиями. Когда 2 процесса пытаются изменить одну и ту же запись, один из них проиграет, потому что их временная метка больше не совпадает с той, что записана в записи. – Igor

+0

'Столбец временной метки записывается и увеличивается при каждом добавлении записи '- если это то, что вы ищете, чтобы вы могли идентифицировать первую запись, добавленную в последовательности, вы должны добавить столбец' identity', а не 'timestamp' колонка. Это будет sql-сервер, увеличенный для каждой новой записи, а затем значение не будет изменено. – Igor

ответ

0

ROW_NUMBER.

Я не знаю вашу точную структуру таблицы, но это было бы похоже на это:

SELECT * 
FROM (
    SELECT c.Invoice, ROW_NUMBER() OVER (PARTITION BY c.Invoice ORDER BY c.TimeStamp ASC) n 
    FROM InvoiceDetails c 
    ) i 
WHERE i.n = 1 
+0

, когда я использую ваш запрос. получив это как результат http://paste.ofcode.org/cKzb6WH3wB2AnMbDjVCYyv – NEO

+0

Он также рассказывает мне о двух нескольких счетах, которые я не смог оценить для первого Созданного Счета. – NEO

+0

Мое намерение - с помощью столбца TimeStamp. могу ли я получить его Самый ранний счет среди группы счетов-фактур – NEO

 Смежные вопросы

  • Нет связанных вопросов^_^