SQL отличается с несколькими требуемыми полями

Я использую Advantage Database Server от Sybase. Мне нужно удалить дубликаты addbatch из моего отчета, но у меня проблемы с извлечением только отдельных записей. Есть идеи, что мне не хватает?

вот что я использую

SELECT  DISTINCT
    SI.[addbatch] as [Batch#],
    SI.[current account #] as [Account],
    SI.[status date] as [Status Date],
    SI.[SKU] as [SKU],
    AC.[email address] as [Email]
FROM  salesinventory SI, accounts AC
WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015'

Я все еще получаю дубликаты addbatch. Я не уверен, где я иду не так! Заранее спасибо! Даже не знал, как погуглить этот вопрос!


person MateoGP    schedule 15.06.2015    source источник
comment
Можете ли вы опубликовать образец результата, который вы получаете?   -  person MartianCodeHound    schedule 15.06.2015
comment
Предполагая, что данный addbatch имеет несколько SKU (или любой другой столбец), конечно, вы получите несколько строк для этого addbatch. Если вам нужны отдельные строки addbatch, вам нужно не включать в запрос значения, которые вызывают повторы.   -  person Andrew    schedule 15.06.2015
comment
@MartianCodeHound результаты, которые я получаю:   -  person MateoGP    schedule 15.06.2015
comment
@MartianCodeHound вот результаты, которые я получаю ссылка   -  person MateoGP    schedule 15.06.2015
comment
@Andrew Эндрю, если я удалю остальные выборки, он будет работать нормально, но мне нужны эти поля в моем отчете, чтобы он работал.   -  person MateoGP    schedule 15.06.2015
comment
Итак, для пакета 2158, какую дату вы хотите использовать в своем отчете: 10.06.2015 или 02.06.2015?   -  person MartianCodeHound    schedule 15.06.2015
comment
@MartianCodeHound Я вижу дыру в своей идее. Мне нужно найти другое поле для работы, потому что addbatches можно перенести в любое время отдельно от их группы. Спасибо, что заставил меня это осознать! Я отпишусь, как только вернусь в систему.   -  person MateoGP    schedule 15.06.2015


Ответы (3)


Проблема в том, что вам нужно проверить уникальность одного столбца, а это на самом деле не то, что выполняет ваш код. Попробуй это

SELECT  *
FROM    (SELECT SI.[addbatch] as [Batch#],
         SI.[current account #] as [Account],
         SI.[status date] as [Status Date],
         ETC,
             ROW_NUMBER() OVER (PARTITION BY [Batch#]) AS RowNumber
     FROM   salesinventory SI, accounts AC
     WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015') as rec
WHERE rec.RowNumber = 1
person DarkNinja955    schedule 15.06.2015
comment
Привет @DarkNinja955, я попробовал это и в итоге получил: poQuery: Error 7200: AQE Error: State = 42000; Нативеррор = 2115; [Решения iAnywhere][Advantage SQL Engine]Ожидаемый лексический элемент не найден: FROM В операторе SELECT отсутствует ключевое слово FROM после определений столбцов. Возникла проблема при синтаксическом анализе имен таблиц после ключевого слова FROM в операторе SELECT. -- Расположение ошибки в операторе SQL: 142 (строка: 4 столбец: 43) - person MateoGP; 15.06.2015
comment
Я должен спросить, а вы заменили ETC в коде на оставшиеся столбцы? - person DarkNinja955; 15.06.2015

-- Следующий код является общим для дедупликации записей, модифицируйте его в соответствии с вашими потребностями.

select  x.[Well_Name] as nameX
      , x.[TestDate]  as dateX
from (
SELECT count(*) as dup
      ,[Well_Name]

      ,[TestDate]enter code here
  FROM [dbo].[WellTests]
  group by  [TestDate] ,[Well_Name] ) x
  where dup > 1
person Henry L    schedule 15.06.2015

Если вы хотите, чтобы в вашем результате были уникальные номера партий, вам необходимо ГРУППИРОВАТЬ ПО полю партии только.

Что-то вроде этого должно работать:

SELECT
    SI.[addbatch] as [Batch#],
    MIN(SI.[current account #]) as [Account],
    MIN(SI.[status date]) as [Status Date],
    MIN(SI.[SKU]) as [SKU],
    MIN(AC.[email address]) as [Email]
FROM  salesinventory SI, accounts AC
WHERE  AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015'
GROUP BY
  SI.[addbatch]

Вы не сказали, как вы хотите агрегировать другие столбцы, просто замените MIN чем-то, что имеет для вас смысл, например SUM или COUNT и т. д.

В документации есть тема о группировке.

PS: SELECT DISTINCT — это (по сути) просто более короткий путь к GROUP BY для всех столбцов без агрегирования.

person Jens Mühlenhoff    schedule 15.06.2015