quantity для key 'last'и 'new', уже долго думаю, помогите пожалуйста.
https://onlinephp.io?s=7VTNTttAEL4j5R3mYCl2CRLlmJBUAVwaKYQqJEUojSrX2ZBVjW1210BUIUFR1UP7BH0KRBW1qAVeYf1G3bUd_Nsf9VD10Dl41zPfzM58s7Orj9yJC6UF13tpYRMoM5hYxp5tMuzYsI_YuuPZrE8RoZvE8dy16QY6wiZSSwsQybqFkc1AMYO1Ehuw1FLMUGuU1RreSIDNAov4IHJkWKFaq4JBiDGF1zFMGTkiW9SKgFCPneABrNRKCwksPRSA-H9Hb-vrPYgVUkZBRWDQaFdJmz0bH6oeHmkScegZNsNsmsGULYOysgS8QtPY9Li7vQXoSNDyQlJLY8vuE72rQ0iOrCDcpYM2OxswMag6J4tWksRpeTDDB0icc-DCmt7b1fUO2M6xqsEStDo9vfus2c6Rt9HcC1zzQJyAxEdtdrf7T2FtL6IqNvQ7re0ONNvtv0C2jY7_Ia4bf0pe6qYykrrkUhRZB5IZh6O11KDIQiZT5a3WajH4FEyDmRNQn-snJnKD0VXQfKtl47ad_WoVEeIQNYGqpUEEMY_YMBgmz0mN1shgxg5ibWTvs4nI0pQvhRomvdQgzjFVtWTUwCE5jFIG6d-gvaLlFipDvQFl_pHf8q_8i_-Oz_xz_w2_4rfA76TS_8A_i_WKXwr1TIBm_Br8c_7JP_MvBOROeJ2FAH7Db_z3_tvAE_wLGSmwXUcxL_m3cqUok6kbJcIMMTXlNCRJzdghoCpY0LBcE-2H1Qw_Urm4mGuFEo1DHdK8DRQ8HCwPMz1R5gNRjH-Yw4sBKYauDFOXTwoeiwICh3o4YUGyeVKCugZDEbegdwFrEiBZKzZL-YHnfYT4BiiFr0TeYd6oLcQINnvowLVEzbRa7bsWHovREcPo_TLMPHMY3FM9_IlPkS3bg1NAFkXZvkv5T-S9_BaRqXdovo2eqYDLyOH0Ow%2C%2C&v=8.2.6
Привет! Для начала, нужно собрать результаты запросов в два разных массива. Затем, после цикла, мы можем вычислить разницу для каждого устройства, если есть таковые. Я модифицировал твой код для того, чтобы это реализовать: public static function getCountUsersGroupByDevice( Client $client, int $siteId, int $audienceId, int $interval ): array { $doubleInterval = $interval * 2; $sql = SELECT device as device, uniq(uid) as quantity, 'last' as key FROM event_stats WHERE siteId = $siteId AND has(audiences, $audienceId) AND timestamp BETWEEN now() - INTERVAL $doubleInterval DAY AND now() - INTERVAL $interval DAY GROUP BY device UNION ALL SELECT device as device, uniq(uid) as quantity, 'new' as key FROM event_stats WHERE siteId = $siteId AND has(audiences, $audienceId) AND timestamp > now() - INTERVAL $interval DAY GROUP BY device; try { $state = $client->select($sql); } catch (\Exception $exception) { Log::error($exception); return []; } $dataSetLength = count($state->rows()); $newData = []; $lastData = []; $result = [ 'title' => 'Количество пользователей сгруппированных по устройствам', 'type' => 'table' ]; for ($i = 0; $i < $dataSetLength; $i++) { $device = $state->rows()[$i][0]; $quantity = $state->rows()[$i][1]; $key = $state->rows()[$i][2]; if ($key == 'new') { $newData[$device] = $quantity; } else { $lastData[$device] = $quantity; } } foreach ($newData as $device => $quantity) { $diff = $quantity - ($lastData[$device] ?? 0); $result[] = [ 'data' => [ 'title' => $device, 'type' => MetricTemplates::Uplift->value, 'data' => [$diff], ], ]; } return $result; } Затестить не могу по понятным причинам Отпишись или подходит решение
Решение подходит, спасибо тебе большое
Обсуждают сегодня