所以每天早上上班时我们都会举行一次站立会议。我们把最近的物体扔到房间里,作为决定谁说话的方法。有点奇怪,我觉得获得这些投掷的一些数据可能很有趣。因此,每天早上我都会记住投掷的顺序(以及其他相关的事情,例如谁丢球/奇怪的海绵物体,这可能曾经是一个球,谁投掷给已经存在或刚刚投掷过的人) ,并将这些数据记录在表格中:
+---------+-----+------------+----------+---------+----------+--------+--------------+
| throwid | day | date | thrownum | thrower | receiver | caught | correctthrow |
+---------+-----+------------+----------+---------+----------+--------+--------------+
| 1 | 1 | 10/01/2012 | 1 | dan | steve | 1 | 1 |
| 2 | 1 | 10/01/2012 | 2 | steve | alice | 1 | 1 |
| 3 | 1 | 10/01/2012 | 3 | alice | matt | 1 | 1 |
| 4 | 1 | 10/01/2012 | 4 | matt | justin | 1 | 1 |
| 5 | 1 | 10/01/2012 | 5 | justin | arif | 1 | 1 |
| 6 | 1 | 10/01/2012 | 6 | arif | pete | 1 | 1 |
| 7 | 1 | 10/01/2012 | 7 | pete | greg | 0 | 1 |
| 8 | 1 | 10/01/2012 | 8 | greg | alan | 1 | 1 |
| 9 | 1 | 10/01/2012 | 9 | alan | david | 1 | 1 |
| 10 | 1 | 10/01/2012 | 10 | david | dan | 1 | 1 |
| 11 | 2 | 11/01/2012 | 1 | dan | david | 1 | 1 |
| 12 | 2 | 11/01/2012 | 2 | david | alice | 1 | 1 |
| 13 | 2 | 11/01/2012 | 3 | alice | steve | 1 | 1 |
| 14 | 2 | 11/01/2012 | 4 | steve | arif | 1 | 1 |
| 15 | 2 | 11/01/2012 | 5 | arif | pete | 0 | 1 |
| 16 | 2 | 11/01/2012 | 6 | pete | justin | 1 | 1 |
| 17 | 2 | 11/01/2012 | 7 | justin | alan | 1 | 1 |
| 18 | 2 | 11/01/2012 | 8 | alan | dan | 1 | 1 |
| 19 | 2 | 11/01/2012 | 9 | dan | greg | 1 | 1 |
+---------+-----+------------+----------+---------+----------+--------+--------------+
我现在已经有了相当多的数据,为了我自己的目的,我开始对它进行一些查询(我还没有告诉团队的其他成员......不会'喜欢影响结果)。我已经完成了一些没有问题,但我一直试图获得某种结果。
我正在寻找的是每个人成为最后一名接球员的次数。现在,正如你在桌子上看到的那样,由于缺席等原因,每天投掷的数量并不总是恒定的,所以我不能简单地通过thrownum选择接收器。
对于上述数据,它将返回:
+--------+-------------------+
| person | LastReceiverTotal |
+--------+-------------------+
| dan | 1 |
| greg | 1 |
+--------+-------------------+
我到目前为止:
SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day
现在,这会返回一些有用的数据。我每天都得到最高的喧嚣。看起来我需要做的就是让接收器获得这个值,然后得到一个由接收器分组的计数来得到我的答案。但是,这不起作用,因为结果集不是由于使用聚合函数的上述查询而看起来的结果。
我怀疑有一种更好的方法来设计表来存储数据,说实话,但同样我也确定有一种方法可以将这些信息与表格一起获取 - 某种内部查询?我无法弄清楚它是如何工作的。任何人都可以了解如何做到这一点吗?
答案 0 :(得分:2)
您拥有的查询为您提供了每天最大的投掷。
有了这个,你只需要与你的桌子进行内部联接并获得接收器及其发生的次数。
select t.receiver as person, count(t.day) as LastReceiverTotal from Throws t
inner join (SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day) a on a.LastThrowNum = t.thrownum and a.day = t.day
group by t.receiver