0

表1:映射表(这包含与句子的标签映射)

id  tag_id     sentence_id

1           10         30

2           11         40

表 2 报告

sentence_id  DATE           property  (sentences may repeat)

30      timestamp1         property1

30      timestamp2         property2

40      timestamp3         property1

我正在尝试获取按时间分组的标签 ID 和标签计数。

我试过这个查询

 SELECT DISTINCT(tag_id),COUNT(tag_id) AS cnt, MONTH(DATE) AS mnt
    FROM mappingtable 
    INNER JOIN reports
    ON mappingtable .sentence_id=reports.sentence_id AND reports.property= 'property1' GROUP BY tag_id,mnt ORDER BY cnt DESC;

但是,如果该语句在报告表中重复(通常是这种情况),则标签计数会出错。

编辑:

编辑

尝试了以下建议的查询:

SELECT M.tag_id,  COUNT(M.tag_id) AS cnt,  MONTH(R.DATE) AS mnt FROM mappingtable M INNER JOIN reports R ON M.sentence_id = R.sentence_id     AND R.property = 'property1' GROUP BY M.tag_id,          MONTH(R.DATE) ORDER BY COUNT(M.tag_id) DESC;

由于重复的句子 id,即使这个查询也给出了额外的计数。

我需要的是按月分组的属性 property1 的唯一句子,然后是这些句子的标签计数。

tag_id  cnt mnt

60865   145 11

60869   99  11

60994   74  11

61163   74  11
4

2 回答 2

0

内部连接将获取两个表共有的记录。我相信这就是为什么你得到错误的标签计数。即使一个句子有两个属性,连接中也只会出现一次。

于 2013-11-05T06:51:43.857 回答
0

像这样的东西:

SELECT
   M.tag_id,
   COUNT(M.tag_id) AS cnt,
   MONTH(R.DATE) AS mnt
FROM mappingtable M
INNER JOIN reports R
ON M.sentence_id = R.sentence_id
    AND R.property = 'property1'
GROUP BY M.tag_id,
         MONTH(R.DATE)
ORDER BY COUNT(M.tag_id) DESC;
于 2013-11-05T06:38:12.990 回答