mysql中的子查询在同一个表中查找

时间:2016-03-15 16:41:42

标签: mysql

我有一个带有此标题的表

id city date item

我有兴趣在同一个月识别同一项目的ID,并计算同月重复收到的项目数。所以我在mysql中的查询是:

select a.id, concat(a.id, month(a.date), a.item) as a from table
 where a = (select concat(b.id, month(b.date), b.item) as b from table)
 group by a.id
having count(a=b)>=1

但是这个查询需要花费太多时间而且可能无效,你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

你对三小时前的评论没有反应。但是从你对Seth McClaine的回答中我得知你想要一个显示id的行列表(,尽管它的名字不是表格的唯一ID!),月份,项目和出现次数。

每个ID,月和项目占一行意味着:group by id, month, item

使用HAVING子句仅显示出现> 1。

select id, month(date), item, count(*)
from mytable
group by id, month(date), item
having count(*) > 1;

嗯,这就是Seth McClaine已经告诉你的事情。虽然你评论了他的答案,但你并没有说出它缺少什么让你接受它。

答案 1 :(得分:0)

我认为你应该可以做这样的事情,给你id项匹配monthitemSelect Count(*) as total, month(date) as month, item, id From table group by (item, month(date), id)

的计数.text start: lui $t8, 0xffff ; load $t8 with -1 ori $t8, $t8, 0xffff addu $t9, $t8, $0 ; copy to $t9 for bit inversion addiu $t0, $0, 0x0000 loop1: addiu $t8, $t8, 1 ; increment counter sw $t8, 0($t0) ; store counter at location $t0 addiu $t0, $t0, 4 ; add 4 to memory pointer $t0 sltiu $at, $t8, 3 ; loop until we抳e done 4 loops bne $at, $0, loop1 loop2: addiu $t0, $t0, -4 ; subtract 4 from memory pointer lw $t5, 0($t0) ; load value xor $t5, $t5, $t9 sw $t5, 0($t0) ; store it back addiu $t8, $t8, -1 ; Update counter beq $t8, $t9, loop3 ; Do it 4 times j loop2 loop3: halt ; Stop the code
{{1}}