Я разрабатываю веб-приложение. В базе данных веб-приложения у меня есть таблица Daily, в которой я делаю записи ежедневно. скажем, у него есть 3 столбца A, B и C. У меня есть другая таблица с именем Monthly, в которой я храню те же значения A, B, C на ежемесячной основе. Теперь я хочу, чтобы, когда один месяц завершается, т.е. нет записей в ежедневной таблице, становится 30 или 31, тогда новая строка создается автоматически в ежемесячной таблице, значения A, B и C будут содержать сумму всех значений в таблице Daily соответствующие значениям A, B, C. Я хочу знать, как я могу это сделать с помощью SQL, и если нет, то какой способ это сделать?Как автоматически создавать строки в таблице после обновления другой таблицы
ответ
ответ Гордон Линофф является, вероятно, хороший путь, в зависимости от вашей базы данных, операционной системы, языка программирования и т.д.
Другой способ заключается в создании «триггер» на Daily столе, который автоматически выполняет суммирование при строка в последний день месяца вставляется. Обратите внимание: триггеры сложны и могут усложнять обслуживание и тиражирование.
Я сделаю это немного более конкретным, чтобы упростить объяснение. Кроме того, детали синтаксиса будут зависеть от вашего конкретного выбора базы данных. Этот ответ будет использовать синтаксис PostgreSQL.
Вот ежедневный стол. Я добавил столбец, содержащий дату, и сделал его основным ключом.
CREATE TABLE daily
(
daily_date date NOT NULL,
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL,
CONSTRAINT daily_pkey PRIMARY KEY (daily_date)
);
А вот Ежемесячная таблица:
CREATE TABLE monthly
(
monthly_date date NOT NULL,
a_sum integer NOT NULL,
b_sum integer NOT NULL,
c_sum integer NOT NULL,
CONSTRAINT monthly_pkey PRIMARY KEY (monthly_date)
);
Теперь мы создаем процедуру, которая должна вызываться, когда в последний раз в день строка месяца вставляется. В PostgreSQL это специальный тип, называемый триггерной функцией. Информация зависит от вашей базы данных.
CREATE OR REPLACE FUNCTION summarize_month()
RETURNS trigger AS
$BODY$DECLARE
month_begin DATE :=
make_date(
cast (extract(year from new.daily_date) as integer),
cast (extract(month from new.daily_date) as integer),
1);
month_end DATE :=
month_begin + interval '1 month' - interval '1 day';
BEGIN
INSERT INTO monthly(monthly_date, a_sum, b_sum, c_sum)
(SELECT month_begin, sum(a), sum(b),sum(c)
FROM daily
WHERE daily_date BETWEEN month_begin AND month_end);
return null;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Эта процедура выясняет начало и окончание даты месяца, чтобы быть суммированы, на основе daily_date
ряда, который был только что вставлен. Затем он вставляет новую строку в таблицу monthly
, содержащую обобщенные данные, вычисленные оператором SELECT
.
Наконец, мы присоединяем функцию триггера к таблице daily
и говорим ей, чтобы она выполнялась только при вставке строки последнего месяца месяца.
CREATE TRIGGER summarize_daily_to_monthly
AFTER INSERT
ON daily
FOR EACH ROW
WHEN ((date_part('month'::text, new.daily_date) <>
date_part('month'::text, (new.daily_date + 1))))
EXECUTE PROCEDURE summarize_month();
Я знаю, что это длинный ответ на то, что звучит как простая проблема. Пожалуйста, не стесняйтесь спрашивать, нуждаетесь ли вы в дальнейшем разъяснении.
спасибо .. Я попробую и дам вам знать –
- 1. Trigger для обновления строки в другой таблице
- 2. Как автоматически обновлять имя таблицы после обновления?
- 3. триггер для обновления другой таблицы после обновления в mysql
- 4. Как данные в таблице из другой таблицы?
- 5. Таблицы PostgreSQL автоматически переиндексируются после обновления?
- 6. Автоматически создавать таблицы дизайна Hibernate
- 7. Попытка обновления тысяч строк в таблице MySQL из другой таблицы
- 8. MySQL триггер после обновления кратного другой таблицы
- 9. Триггер MySQL для обновления определенной строки в другой таблице
- 10. Как автоматически увеличивать значение в одной таблице при вставке строки в другой таблице
- 11. Выберите строки таблицы, имеющие соответствующие строки в другой таблице
- 12. Как отфильтровать строки таблицы из другой таблицы
- 13. Как обновить date_modified с помощью sysdate после обновления другой строки?
- 14. Как обновить строки в таблице, отличной от другой таблицы?
- 15. Обновление таблицы в триггере после обновления в той же таблице
- 16. Создание триггера ПОСЛЕ ОБНОВЛЕНИЯ для обновления другой таблицы
- 17. Создание таблицы из другой проблемы обновления таблицы
- 18. Yii 1 - удаление строки после сохранения строк в другой таблице
- 19. обновления DataTable после обновления таблицы
- 20. Как найти строки в таблице, которые не в другой таблице
- 21. Столбец обновления Mysql на основе строки из другой таблицы
- 22. Symfony2: обновить несколько строк в таблице, после обновления поля в другой таблице
- 23. создать триггер для обновления таблицы при вставке новой строки в другой таблице в MySQL
- 24. Обновление одной таблицы на основе другой таблицы автоматически в SQL?
- 25. Текст обновления SQL из другой таблицы
- 26. строки обновления mysql во внутренней объединенной таблице
- 27. После выбора строки другой строка выбрана автоматически из UITableView
- 28. Автоматически создавать свойства - из таблицы базы данных
- 29. SNMP4J для обновления строки в таблице SNMP?
- 30. Обновление значения в таблице из другой таблицы
Вы должны запланировать работу в первый день каждого месяца, чтобы суммировать ежедневные значения. Детали зависят от базы данных и системы, которую вы используете. –
Как я могу добавить работу? –
Как говорит @GordonLinoff, расписания работы зависят от базы данных, в которой вы работаете. Не могли бы вы рассказать нам, какую базу данных вы используете? –