Есть ли способ объединить результаты двух запросов в Python, используя движок sqlalchemy? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь запустить два sql-запроса с использованием движка sqlalchemy в python 3.7.Однако у меня возникают проблемы при объединении столбцов результатов из двух запросов.Есть ли эффективный способ сделать это для MSSQL?

Ниже приведена таблица, которая запрашивается

timestamp           startX  startY  Number
2019-05-13-10:31    695     384     0
2019-05-13-10:32    3914    256     25ZLH3300MEPACC16x25
2019-05-13-10:32    3911    442     25ZLH3300MEPACC16x25
2019-05-13-10:32    3904    2109    25ZLH3300MEPACC16x25
2019-05-13-10:32    3910    627     25ZLH3300MEPACC16x25
2019-05-13-10:32    3904    1445    25ZLH3300MEPACC16x25

, и мне нужно получить это в качестве вывода

timestamp           startX  startY  Number                 Quantity
2019-05-13-10:31    695     384     0                      1
2019-05-13-10:32    3914    256     25ZLH3300MEPACC16x25   5

Первый запрос возвращает уникальные записи на основе числа следующим образом

SELECT * FROM 
    (SELECT 
       [timestamp]
      ,[startX]
      ,[startY]
      ,[Number]
  ,ROW_NUMBER() OVER(Partition by [Table].Number, 
                                    [Table].Number,  
                                    type order by [timestamp] DESC) rownumber 
                                    FROM [Table]) a WHERE rownumber = 1

Второй запрос возвращает количество повторяющихся записей в виде столбца Количество со столбцом числа.

SELECT [Table].Number, count(*) AS 'Quantity'
FROM   [Table]
GROUP  BY [TABLE].Number
HAVING count(*) >= 1

Я хочу присоединитьсярезультаты запроса № 1 и количество столбцов из запроса № 2 на основе числа в качестве первичного ключа.

connection = engine.connect()
            connection.execute(""" Query """)

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Вы можете просто сделать это в одном запросе, например:

SELECT
  *
FROM
(
    SELECT 
        [timestamp]
       ,[startX]
       ,[startY]
       ,[Number]
       ,ROW_NUMBER()
            OVER (PARTITION BY [Table].Number, 
                               [Table].type
                      ORDER BY [timestamp] DESC
                 )
                   AS rownumber 
       ,COUNT(*)
            OVER (PARTITION BY [Table].Number
                 )
                   AS Quantity
    FROM
      [Table]
)
    a
WHERE
        rownumber = 1
    AND quantity  > 1
0 голосов
/ 14 мая 2019

Вы можете попробовать использовать pandas и присоединиться к DataFrames:

import pandas as pd
import sqlalchemy

engine = slqalchemy.create_enging(my_sql_settings)

df_unique_records = pd.read_sql(sql=my_query_1, conn=engine, index_col=Number)
df_duplicate_counts = pd.read_sql(sql=my_query_2, conn=engine, index_col=Number)

df = df_unique_records.merge(df_duplicate_counts, left_index=True, right_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...