我有一个表(变量(无限种类),attr(正好3个不同的属性),日期,状态(只能是1,2或3)):
------------------------------------
| Variable | Attr | Date | State |
|------------------------------------|
| V1 | A1 |01/01/14 | 0 |
| V1 | A1 |01/02/14 | 2 |
| V1 | A1 |01/03/14 | 1 |
| V1 | A1 |01/04/14 | 2 |
| V1 | A2 |01/01/14 | 1 |
| V1 | A2 |01/02/14 | 0 |
| V1 | A2 |01/03/14 | 1 |
| V1 | A2 |01/04/14 | 1 |
| V1 | A3 |01/01/14 | 0 |
| V1 | A3 |01/02/14 | 0 |
| V1 | A3 |01/03/14 | 1 |
| V1 | A3 |01/04/14 | 2 |
| V2 | A1 |01/01/14 | 2 |
| V2 | A1 |01/02/14 | 1 |
| V2 | A1 |01/03/14 | 2 |
| V2 | A1 |01/04/14 | 1 |
| V2 | A2 |01/01/14 | 1 |
| V2 | A2 |01/02/14 | 2 |
| V2 | A2 |01/03/14 | 1 |
| V2 | A2 |01/04/14 | 0 |
| V2 | A3 |01/01/14 | 1 |
| V2 | A3 |01/02/14 | 0 |
| V2 | A3 |01/03/14 | 2 |
| V2 | A3 |01/04/14 | 1 |
| V3 | A1 |01/01/14 | 1 |
| V3 | A1 |01/02/14 | 2 |
| V3 | A1 |01/03/14 | 1 |
| V3 | A1 |01/04/14 | 1 |
| V3 | A2 |01/01/14 | 1 |
| V3 | A2 |01/02/14 | 0 |
| V3 | A2 |01/03/14 | 0 |
| V3 | A2 |01/04/14 | 2 |
| V3 | A3 |01/01/14 | 1 |
| V3 | A3 |01/02/14 | 0 |
| V3 | A3 |01/03/14 | 2 |
| V1 | A3 |01/04/14 | 1 |
| . | . |. | . |
| Vn | An |n | n |
|----------|------|----------|-------|
我想要的输出(音符计数是此示例的完全随机值):
------------------------------------
| Variable | Attr | Count | State |
------------------------------------
| V1 | A1 | 50 | 0 |
| V1 | A1 | 24 | 1 |
| V1 | A1 | 22 | 2 |
| V1 | A2 | 1 | 0 |
| V1 | A2 | 0 | 1 |
| V1 | A2 | 15 | 2 |
| V1 | A3 | 68 | 0 |
| V1 | A3 | 9 | 1 |
| V1 | A3 | 34 | 2 |
| V2 | A1 | 10 | 0 |
| V2 | A1 | 0 | 1 |
| V2 | A1 | 25 | 2 |
| V2 | A2 | 48 | 0 |
| V2 | A2 | 96 | 1 |
| V2 | A2 | 14 | 2 |
| V2 | A3 | 12 | 0 |
| V2 | A3 | 3 | 1 |
| V2 | A3 | 0 | 2 |
| V3 | A1 | 4 | 0 |
| V3 | A1 | 5 | 1 |
| V3 | A1 | 8 | 2 |
| V3 | A2 | 19 | 0 |
| V3 | A2 | 95 | 1 |
| V3 | A2 | 26 | 2 |
| V3 | A3 | 4 | 0 |
| V3 | A3 | 85 | 1 |
| V3 | A3 | 50 | 2 |
| . | . |. | . |
| Vn | An |n | n |
|----------|------|------|-------|
我要做的第一件事就是选择一个变量+ attr + state组合,我希望我的查询基于top base。所以我要说我选择V2 + A3 + 2.接下来我想去找所有行的日期,其中var = V2,attr = A3,state = 2.接下来我需要仔细检查这些日期并计算所有日期其他var + attr +状态组合。例如,如果V2 + A3 + 2发生在01/01/14,02/06 / 14,02 / 07 / 14,04 / 09/14和05/03/14,它将通过这些上的所有其他变量日期并将每个var + attr +状态组合的出现次数相加。因此输出将对每个var + attr +状态组合进行分组,并显示每个组合的计数。
我尝试了很多不同的东西,比如左连接,内连接
(例如
SELECT variable, attr, count(state), state (SELECT variable, attr, state FROM t1 WHERE variable ='V2' AND Attr ='A3' and state = 2) a INNER JOIN t1 V on key a.date = b.date GROUP BY variable, attr
)
但无法让它发挥作用。
答案 0 :(得分:1)
SELECT m2.variable, m2.attr, m2.state, COUNT(*)
FROM mytable m1
JOIN mytable m2
ON m2.date = m1.date
WHERE (m1.variable, m1.attr, m1.state) = ('V2', 'A3', 2)
GROUP BY
m2.variable, m2.attr, m2.state