Запрос выполнения для удаления дубликатов на основе количества дубликатов - PullRequest
0 голосов
/ 25 октября 2019

Наш бухгалтерский отдел должен ежемесячно извлекать налоговые данные из нашей MIS и отправлять их онлайн в Департамент доходов. К сожалению, при извлечении данных они дублируются разное количество раз в зависимости от того, в каких юрисдикциях мы должны платить налоги. Все, что ей нужно, это сумма в долларах для одной юрисдикции, для одной строки, потому что она вводит ее на веб-сайте.

Я пытался использовать DISTINCT, чтобы получить только одну запись типа, в сочетании с LEFT ()вытащить только первые 7 символов юрисдикции, но в итоге исключили некоторые результаты, которые должны были быть включеныЯ полагаю, это произошло потому, что дата проводки и сумма на пару транзакций были идентичны. Это были отдельные транзакции, но запрос принял их как дубликаты и проигнорировал их.

Вот несколько примеров выполненных мной запросов, которые были успешными при извлечении большей части данных, но в большинстве случаев слишком многоили недостаточно:

    SELECT DISTINCT LEFT("Sales-Tax-Jurisdiction-Code", 7), "Taxable-Base", "Posting-Date"
    FROM ARInvoiceTax
    WHERE ("Posting-Date" >= '2019-09-01' AND "Posting-Date" <= '2019-09-30') 
    AND (("Sales-Tax-Jurisdiction-Code" BETWEEN '55001' AND '56763') 
    OR "Sales-Tax-Jurisdiction-Code" = 'Dakota Cty TT')
    ORDER BY "Sales-Tax-Jurisdiction-Code"

Вот запрос, который я могу извлечь из всех данных, и последующий результат ниже:

    SELECT "Sales-Tax-Jurisdiction-Code", "Taxable-Base", "Posting-Date"
    FROM ARInvoiceTax
    WHERE ("Posting-Date" >= '2019-09-01' AND "Posting-Date" <= '2019-09-30') 
    AND (("Sales-Tax-Jurisdiction-Code" BETWEEN '55001' AND '56763') 
    OR "Sales-Tax-Jurisdiction-Code" = 'Dakota Cty TT')
    ORDER BY "Sales-Tax-Jurisdiction-Code"

Ниже приведен пример вывода:

Jurisdiction | Tax Amount | Posting Date
-------------|------------|-------------
5512100City  |  $50.00    | 2019-09-02
5512100City  |  $50.00    | 2019-09-03
5512100City  |  $70.00    | 2019-09-02
5512100Cnty  |  $50.00    | 2019-09-02
5512100Cnty  |  $50.00    | 2019-09-03
5512100Cnty  |  $70.00    | 2019-09-02
5512100State |  $70.00    | 2019-09-02
5512100State |  $50.00    | 2019-09-02
5512100State |  $50.00    | 2019-09-03
5513100Cnty  |  $25.00    | 2019-09-12
5513100State |  $25.00    | 2019-09-12
5514100City  |  $9.00     | 2019-09-06
5514100City  |  $9.00     | 2019-09-06
5514100Cnty  |  $9.00     | 2019-09-06
5514100Cnty  |  $9.00     | 2019-09-06
5515100State |  $12.00    | 2019-09-11
5516100City  |  $6.00     | 2019-09-13
5516100City  |  $7.00     | 2019-09-13
5516100State |  $6.00     | 2019-09-13
5516100State |  $7.00     | 2019-09-13

Как видите, данные могут быть повсюду. Один почтовый индекс может иметь несколько разных строк. В настоящее время бухгалтерия печатает отчет с этой информацией и в электронной таблице записывает только (1) долларовую сумму за транзакцию. Например, для 55121 ей нужно будет записать 50,00, 50,00 и 70,00 долларов (она подсчитывает их и добавляет общую сумму на веб-сайте), однако SQL-запрос дает мне эти (3) числа (3) раза.

Кажется, я не могу понять запрос, который будет извлекать только один набор данных. К сожалению, я не могу сделать это на основе слов / букв после 00, потому что не во всех юрисдикциях есть все 3 (город, штат, штат) и, таким образом, пытаюсь удалить строки на основе этого, что также удаляет допустимые строки.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Берите только город / округ / .. что бы ни было первым

select jurisdiction, tax_amount, Posting_Date
from (
    select *, dense_rank() over(partition by left(jurisdiction, 7) order by substring(jurisdiction, 8, len(jurisdiction))) rnk
    from taxes -- you output here
)
where rnk=1;

Синтаксис сервера SQL, вам могут понадобиться другие строковые функции в ваших базах данных.

Postgresql fiddle

0 голосов
/ 25 октября 2019

Можете ли вы использовать select distinct? Если первые пять символов - почтовый индекс, и вы просто хотите, чтобы:

select distinct left(jurisdiction, 5), tax_amount
from t;
...