Я начну с того, что я новичок в SQL, поэтому прошу прощения, если это глупый вопрос.
Я работаю над программой, которая импортирует CSV в базу данных, которую я позже проанализировать с помощью pandas. Я получаю один CSV в день со списком проданных в этот день артикулов и статистикой c для каждой артикула. Если у SKU 0 продаж за день, он исключается из CSV. В настоящее время в моей таблице sqlite есть 3 столбца для года, месяца и дня, и каждая строка представляет один SKU.
Пользователь моей программы сможет запрашивать данные о продажах для данного SKU в течение заданного периода времени. .
Инженер-программист посоветовал мне добиться большей производительности, если разделить год, месяц и день на отдельные столбцы. Мысль заключалась в том, что я могу быстро выбрать целые месяцы для заданного периода времени, вместо того, чтобы повторять каждый день.
Однако, насколько я могу судить, мне все равно нужно будет найти отдельные SKU, поэтому Я не знаю, как использовать этот подход. В настоящее время у меня есть многоколоночный указатель для года, месяца и дня. Но если выбран целый месяц, мне все равно нужно перебирать каждый день месяца, чтобы найти каждое появление SKU.
Ниже приведен logi c, который я разработал до сих пор для генерации моего запроса :
-dict1 - это словарь, в котором ключ представляет собой кортеж (гггг, мм), а ключ - это кортеж первого дня выбранного месяца и последнего дня выбранного месяца. напр. {(2020, 02): (15, 29)}
-dict2 - это словарь, в котором ключ представляет собой кортеж (гггг, мм), а ключ - количество дней в месяце.
For x in dict1
a = dict1[x]
if ((a[1] - a[0]) + 1) == dict2[x]:
query += f"SELECT * FROM skuStats WHERE year = x[0] AND month = x[1] AND sku = {sku}"
else:
query += f"SELECT * FROM skuStats WHERE year = x[0] AND month = x[1] AND day BETWEEN a[0] AND a[1] AND sku = {sku}"
last_item = list(dict1.items())
if not x == last_item[-1]:
query += " UNION ALL "
Я знаю, это звучит так, будто я пытаюсь изобрести колесо, поскольку SQL имеет встроенную функциональность для дат. Я также знаю, что по большому счету это не огромная база данных. Но я надеялся использовать это как упражнение, чтобы изучить передовой опыт работы с гораздо большими базами данных, а не просто выбрать легкий путь. Заранее благодарим за любой совет или помощь.