Как мне воспроизвести функцию панды в MySQL? - PullRequest
3 голосов
/ 07 октября 2019

Я новичок в SQL и пытаюсь отучиться от того, что я знаю в Python. У меня есть скрипт, где я подключаюсь к odbc SSMS для работы с данными в Python:

import pyodbc
import pandas as pd
#odbc
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=PMZZ315\RION;'
                      'Database=Warehouse;'
                      'Trusted_Connection=yes;')

cursor = conn.cursor()

df = pd.read_sql_query("SELECT [LetId],[StreetAddressLine1],[CompanyName] FROM Dim.Let", conn)
df

df.head()
#print(df.columns)


# Select duplicate rows except first occurrence based on all columns
duplicateRowsDF = df[df.duplicated(['CompanyName','StreetAddressLine1'])]

#print("Duplicate Rows except first occurrence based on all columns are :")
print(duplicateRowsDF)
duplicateRowsDF.to_csv("duplicateRowsDFodbc.csv")

Какая функция в SQL может заменить функцию df.duplicated? Все, что я пытаюсь сделать, это обнаружить дублирующиеся записи, игнорируя первый экземпляр, если название компании и почтовый адрес повторяются

Представляет выходной набор данных:

LetId   StreetAddressLine1           CompanyName
32  1451 West Brimson View Court    Palmer 
405 1808 North Lonion Ave           Ozark 
465 4223 Monty Hwy              Alabama 

1 Ответ

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

Таблицы SQL представляют неупорядоченные наборы. Упорядочение обеспечивается только по столбцам в данных. Нет «первого» без заказа. Позвольте мне предположить, что letid определяет порядок.

Канонический способ в SQL использует row_number():

select t.*
from (select t.*,
             row_number() over (partition by CompanyName, StreetAddressLine1 order by letid) as seqnum
      from t
     ) t
where seqnum = 1;
...