Я работаю на следующей таблице:Невозможно вставить дублированием KEY UPDATE из другого запроса
CREATE TABLE `cons` (
`Id` char(20) NOT NULL,
`Client_ID` char(12) NOT NULL,
`voice_cons` decimal(11,8) DEFAULT '0.00000000',
`data_cons` int(11) DEFAULT '0',
`day` date DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Мне нужно получить некоторые данные из другой таблицы, cdr
, который содержит строку для каждого события. Это означает, что каждый вызов или соединение с данными имеет свою собственную строку.
+-----------+--------------+----------------+-------+
| Client_ID | Data_Up_Link | Data_Down_Link | Price |
+-----------+--------------+----------------+-------+
| 1 | 23 | 56 | 0 |
| 1 | 12 | 3 | 0 |
| 1 | 0 | 0 | 5 |
+-----------+--------------+----------------+-------+
Мне нужно вычислить общий голос и потребление данных для каждого Client_ID
в моем новом cons
стола, но просто держать одну запись для каждого Client_ID
и day
. Чтобы вопрос был простым, я рассмотрю только один день.
+-----------+-----------+------------+
| Client_ID | data_cons | voice_cons |
+-----------+-----------+------------+
| 1 | 94 | 5 |
+-----------+-----------+------------+
я безуспешно пытался следующее, среди многих других (псевдоним.
insert into cons_day (Id, Client_ID, voice_cons, MSISDN, day)
select
concat(Client_ID,date_format(date,'%Y%m%d')),
Client_ID,
sum(Price) as voice_cons,
date as day
from cdr
where Type_Cdr='VOICE'
group by Client_ID;
insert into cons_day (Id, Client_ID, data_cons, MSISDN, day)
select
concat(Client_ID,date_format(date,'%Y%m%d')),
Client_ID,
sum(Data_Down_Link+Data_Up_Link) as data_cons,
Calling_Number as MSISDN,
date as day
from cdr
where Type_Cdr='DATA'
group by Client_ID
on duplicate key update data_cons=data_cons;
Но я продолжаю получать значения без изменений или получения ошибок SQL. Я бы очень признателен за совет.
большое спасибо заранее.
Можете ли вы объяснить, как вы получите '64' для' 'data_cons' с суммой (Data_Down_Link + Data_Up_Link)'? Разве это не '94'? Также похоже, что вам нужны 'data_cons' и' voice_cons' в день. Это верно? – peterm
@peterm Извините, опечатка. Вы правы, мне нужна строка за каждый клиентский_идентификатор и день. Я постарался максимально упростить вопрос, но я переусердствовал. Сейчас я отредактирую. Спасибо! – Serge