Есть таблица table: ID|мероприятие|ФИО|организация|этап| 1........ a............... fio1 ..........x............ 1 2........ a............... fio1 ..........x............ 2 3........ a............... fio2 ..........y ........... 3 4........ b............... fio3 ..........z............ 1 5........ b................fio3 ..........z.............3 Необходимо узнать количество мероприятий которыми занималась организация, которая не инициировала мероприятие (этап <> 1) и сгрупировать по ФИО. [sql]SELECT SUM(CASE WHEN t1.организация <> t2.организация THEN 1 ELSE END) FROM table t1 INNER JOIN ( SELECT *, MAX(ID) FROM table t2 GROUP BY мероприятие )t2 ON t2.мероприятие= t1.мероприятие AND t2.MAX(ID) = t1.ID[/sql] Кто-нибудь может предложить вариант попроще?
:?: Наверное, я плохо изложил задачу. Нужно сравнить две организации (на первом и последнем этапе в рамках одного мероприятия), если они разные, то считаем количество.
[sql]SELECT s.fam, s.name, s.otch, (SUM( CASE WHEN mt.meroprID=1 AND fh1.statusID =17 THEN 1 END ) + SUM( CASE WHEN mt.meroprID=1 AND fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID THEN 0 ELSE 1 END ) + SUM( CASE WHEN mt.meroprID=1 AND IF( ( fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID ), 0, 1 ) AND fh1.statusID =17 THEN 1 END )) AS ball1, (SUM( CASE WHEN mt.meroprID=2 AND fh1.statusID =17 THEN 1 END ) + SUM( CASE WHEN mt.meroprID=2 AND fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID THEN 0 ELSE 1 END ) + SUM( CASE WHEN mt.meroprID=2 AND IF( ( fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID ), 0, 1 ) AND fh1.statusID =17 THEN 1 END )) AS ball2, (SUM( CASE WHEN mt.meroprID=3 AND fh1.statusID =17 THEN 1 END ) + SUM( CASE WHEN mt.meroprID=3 AND fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID THEN 0 ELSE 1 END ) + SUM( CASE WHEN mt.meroprID=3 AND IF( ( fh2.filialID = fh1.filialID AND fh2.doID = fh1.doID AND fh2.otdelID = fh1.otdelID ), 0, 1 ) AND fh1.statusID =17 THEN 1 END )) AS ball3 FROM `fhase_history` fh1 INNER JOIN ( SELECT * , max( fhase_historyID ) AS max FROM fhase_history WHERE date_format( date_close, '%Y-%m-%d' ) > current_date - INTERVAL 30 DAY GROUP BY map_targetID )fh2 ON fh2.map_targetID = fh1.map_targetID AND fh2.max = fh1.fhase_historyID LEFT JOIN sotrudnik s ON s.sotrudnikID=fh1.sotrudnikIDclose LEFT JOIN map_target mt ON mt.map_targetID=fh1.map_targetID WHERE fh1.filialID = '1' AND fh1.doID = '10' AND fh1.otdelID = '3' GROUP BY fh1.sotrudnikIDclose ORDER BY ball6 DESC LIMIT 5 [/sql] Можно ли в mysqlем сложить все баллы? Можно ли упростить запрос?