以下查询告诉我当天有多少销售。 还有多少新用户和学分。
这是我的工作查询(效果很好!):
SELECT Substring(purchase.`date`,1,10) AS `DayDate`,
Sum(Cast(Substring(purchase.`item`, 12) AS UNSIGNED)) AS `Credit`,
Count(1) AS `Sales`,
(SELECT Count(*) FROM enswitch_mobile_users WHERE Date(purchase.`date`) = Substring(enswitch_mobile_users.`creation_date`,1,10)) AS `New_users`
FROM (SELECT item, date
FROM enswitch_new_iphone_purchases WHERE `status`=1
UNION
SELECT item, date
FROM enswitch_new_android_purchases WHERE `status`=1) AS `purchase`
WHERE purchase.`date` >= :from_date AND purchase.`date` <= :to_date
GROUP BY `DayDate`
ORDER BY `DayDate` DESC
我在这里搜索3个表格。
enswitch_new_android_purchases
enswitch_new_iphone_purchase
它们都有item,user_id,status和date列。
一个条目的示例:
date
:2012-08-01 16:24:30
item
:xsalnx.sip.70
user_id
:1337
status
:1
同时从enswitch_mobile_users
(id,creation_date,移动ID,...)中提取mobile_users金额,并将其与特定日期分组。
我想要做的是添加测试,如果购买的用户或新用户是测试人员。如果是这样,我想在我的查询中忽略这些数据。
我将测试人员保存在一张名为:
enswitch_testing_devices
(id,name,mobile_id)。
我可以使用enswitch_mobile_users
(mobile_id列)加入数据。
到目前为止,我试图让它工作但没有运气.. 我该怎么做这个查询?
答案 0 :(得分:0)
尝试下面 - 只需在获得用户时添加一个子句 - 获取除测试之外的所有用户。现在,示例数据和结构表将有所帮助。 (我想你可以重新编写查询。)
SELECT Substring(purchase.`date`,1,10) AS `DayDate`,
Sum(Cast(Substring(purchase.`item`, 12) AS UNSIGNED)) AS `Credit`,
Count(1) AS `Sales`,
(
SELECT Count(*)
FROM enswitch_mobile_users
WHERE
Date(purchase.`date`) = Substring(enswitch_mobile_users.`creation_date`,1,10)
AND enswitch_mobile_users.mobile_id NOT IN ( select mobile_id from enswitch_testing_devices WHERE 'is tester')
) AS `New_users`
FROM (SELECT item, date
FROM enswitch_new_iphone_purchases WHERE `status`=1
UNION
SELECT item, date
FROM enswitch_new_android_purchases WHERE `status`=1) AS `purchase`
WHERE purchase.`date` >= :from_date AND purchase.`date` <= :to_date
GROUP BY `DayDate`
ORDER BY `DayDate` DESC
答案 1 :(得分:0)
我设法解决了这个问题。
如果有人想知道的话。
function search_daily_sales($from_date, $to_date ,$show_testers)
{
// If not showing the testers
if ($show_testers === false)
{
$sql = "SELECT Substring(purchase.`date`,1,10) AS `DayDate`,
Sum(CASE WHEN td.mobile_id IS NULL
THEN Cast(Substring(purchase.`item`, 12) AS UNSIGNED)
ELSE '0' END) AS `Credit`,
Sum(CASE WHEN td.mobile_id IS NULL THEN '1' ELSE '0' END) AS `Sales`,
(SELECT Count(*) FROM enswitch_mobile_users
WHERE
Date(purchase.`date`) = Substring(enswitch_mobile_users.`creation_date`,1,10)
AND enswitch_mobile_users.`mobile_id` NOT IN (SELECT mobile_id FROM enswitch_testing_devices)) AS `New_users`,
MIN(CASE WHEN td.mobile_id IS NULL THEN '0' ELSE '1' END) AS `tester`
FROM (SELECT item, date, user_id
FROM enswitch_new_iphone_purchases WHERE `status`=1
UNION
SELECT item, date, user_id
FROM enswitch_new_android_purchases WHERE `status`=1) AS `purchase`
LEFT JOIN enswitch_mobile_users mu ON mu.id = purchase.user_id
LEFT JOIN enswitch_testing_devices td ON td.mobile_id = mu.mobile_id
WHERE purchase.`date` >= :from_date AND purchase.`date` <= :to_date
GROUP BY `DayDate`
ORDER BY `DayDate` DESC";
}
else
{
$sql = "SELECT Substring(purchase.`date`,1,10) AS `DayDate`,
Sum(Cast(Substring(purchase.`item`, 12) AS UNSIGNED)) AS `Credit`,
Count(1) AS `Sales`,
(SELECT Count(*) FROM enswitch_mobile_users WHERE Date(purchase.`date`) = Substring(enswitch_mobile_users.`creation_date`,1,10)) AS `New_users`
FROM (SELECT item, date
FROM enswitch_new_iphone_purchases WHERE `status`=1
UNION
SELECT item, date
FROM enswitch_new_android_purchases WHERE `status`=1) AS `purchase`
WHERE purchase.`date` >= :from_date AND purchase.`date` <= :to_date
GROUP BY `DayDate`
ORDER BY `DayDate` DESC";
}
$result = DB::query(Database::SELECT, $sql)->bind(':from_date', $from_date)->
bind(':to_date', $to_date)->execute();
return $result;
}