@AndrFK
DS

Python 3.7 — как добавить поля в таблицу по возрастанию даты?

Здравствуйте.
Есть таблица
id цвет дата
37654 зеленый 24.05.2020
87564 красный 24.05.2020
54211 зеленый 24.02.2020
75604 желтый 11.01.2017
54211 красный 10.03.2021
874453 желтый 12.04.2020
54211 желтый 12.03.2020
98764 зеленый 10.05.2019
45 зеленый 24.05.2020
98764 желтый 10.10.2018
7423 красный 14.06.2020

Как мне из нее сделать другую таблицу:

id цвет_дата1 цвет_дата2 цвет_дата3
45 зеленый NULL NULL
7423 красный NULL NULL
37654 зеленый NULL NULL
54211 зеленый желтый красный
75604 желтый NULL NULL
87564 красный NULL NULL
98764 желтый зеленый NULL
874453 желтый NULL NULL

Т.е. я хочу отфильтровать все по возрастанию 'id' и 'дата', и если 'id' повторяется, каждое последующее значение в 'цвет' вносить в добавляемый столбец (их может быть до 10).
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Вот пример. Уже ночь, поэтому за код не ручаюсь. Сортировку по id и дате думаю сами прикрутите без проблем.
import sqlite3

conn = sqlite3.connect('colors.db')
cursor = conn.cursor()


cursor.execute('SELECT id FROM colors') # Выбираем все id из таблици colors
result = cursor.fetchall()


unique_ids = set(result) # Здесь получаем уникальные id

for unique_id in unique_ids: # Проходимся по каждому id

	cursor.execute('SELECT * FROM colors WHERE id=?',(unique_id[0],)) # Выбираем все записи с уникальным id
	result2 = cursor.fetchall()

	colors_list = [unique_id[0]] # Создаем список, который будем заносить в базу. Сразу первым элементом
								 # добавляем в список id

	for tmp in result2: # В result2 у нас все записи каждого id
		colors_list.append(tmp[1]) # Кортеж из базы имеет 3 элемента - id, цвет, дата. Нам нужен цвет, поэтому 
								   # добавляем в список второй элемент

	if len(colors_list) < 10: # Проверяем длину списка.
		for _ in range(0,11-len(colors_list)): # Здесь в цикле выравниваем список, чтобы его потом передать в базу.
			colors_list.append(None) # Добавляем в список None

	print(colors_list)

	cursor.execute('INSERT INTO colors2 VALUES(?,?,?,?,?,?,?,?,?,?,?)',(colors_list))
	conn.commit()

conn.close()

Структуры таблиц

CREATE TABLE "colors" (
	"id"	int,
	"color1"	text,
	"date"	text
);

CREATE TABLE "colors2" (
	"id"	int,
	"color1"	text,
	"color2"	text,
	"color3"	text,
	"color4"	text,
	"color5"	text,
	"color6"	text,
	"color7"	text,
	"color8"	text,
	"color9"	text,
	"color10"	text
);


6060f02201300460884664.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы