2016-11-26 44 views
1

如何计算每天的不同值?和每一天的总价值?在一个请求中。每天计算并求和不同的值

key1 | key2 | tdate | tview 
1 | 20161123454647 | 2016-11-23 11:11:11 | view1 
2 | 20161123454648 | 2016-11-23 11:11:11 | view2 
3 | 20161122454649 |2016-11-22 11:11:11 | view2 
4 | 20161122454650 |2016-11-22 11:11:11 | view1 
5 | 20161122454653 |2016-11-22 11:11:11 | view2 
6 | 20161122454661 |2016-11-22 11:11:11 | view2 
7 | 20161121454622 |2016-11-21 11:11:11 | view3 
8 | 20161121454679 |2016-11-21 11:11:11 | view1 
9 | 20161121454684 |2016-11-21 11:11:11 | view3 

我发现总每天tview的所有值的计算:

SELECT DATE(tdate)日期,COUNT(DISTINCT tview)totalOfViews FROM MYTABLE GROUP BY DATE(tdate)

我有一个键(key2),其中日期和一个渲染的数量,因为我不想在同一天呈现两个相同的渲染的连接。

当我使用'插入重复键2更新'插入新渲染时,对我来说最容易。我只用一个请求更新视图的数量。我不知道'INSET ON DUPLICATE'< 2个不同的键> UPDATE:newview。有趣的问题太;-)

日期是我的表中的时间戳。

我使用php 7,MySQL和PDO做语句。

一个有趣的输出的:

day | totaView1 | totalView2 | totalView3 | totalView1+view2 |totalOfViews 
2016-11-23 | 1 | 1 | 0 | 2 | 2 
2016-11-22 | 1 | 3 | 0 | 4 | 4 
2016-11-21 | 1 | 0 | 2 | 1 | 3 

后,我发现到范围的请求的日期和比较每天数视图的演变。例如:

Day (currentmonth) | totaView1 | totalView1 (lastmonth) |totalOfViews 

“alter table”能做到这个结果吗?

+0

请给我们您预期的输出,因为这现在还不清楚。 –

+0

我编辑结果 – julux

+1

我发现有一个简单的结果。因为在这之后我会计算平均风险和弹性的观点。 ;-)最有趣的,我希望 – julux

回答

0

一种可能性是使用条件汇总:

SELECT DATE(tdate) AS day, 
     SUM(CASE WHEN tview = 'view1' THEN 1 ELSE 0 END) AS totaView1, 
     SUM(CASE WHEN tview = 'view2' THEN 1 ELSE 0 END) AS totaView2, 
     SUM(CASE WHEN tview = 'view3' THEN 1 ELSE 0 END) AS totaView3, 
     SUM(CASE WHEN tview = 'view1' OR tview = 'view2' 
       THEN 1 ELSE 0 END) AS totaView1Or2, 
     COUNT(*) AS totalOfViews 
FROM mytable 
GROUP BY DATE(tdate) 
+0

谢谢!我们也可以使用它来选择期间?本月在哪里DATE_ADD(NOW(),INTERVAL -1个月)和NOW()以及上个月? WHERE tdate BETWEEN DATE_ADD(NOW(),INTERVAL -2 MONTH)和DATE_ADD(NOW(),INTERVAL -1 MONTH) – julux

+0

@julux是的,您可以将此条件添加到WHERE条款。 –

+1

谢谢。 SQL请求是一项运动! – julux