帮助另一个mysql查询

时间:2009-10-11 09:48:05

标签: sql mysql

我想在表格中选择新添加的DISTINCT product_id的计数

ID    product_id
 1      abc
 2      abc
 3      cat
 4      dog
 5      dog
 6      man
 7      man
 8      bat
 9      bat
10      abc
11      cat
12      dog
13      dog

我想要一个查询,从上表中得到类似的结果 -
狗-2
猫-1
abc -1
蝙蝠-2
男人-2

*提前致谢
*修改
我有一个用于存储产品图像的表,我不断在此表中添加新产品图像,我想选择该特定产品新添加图像的计数(忽略之前在表中添加的先前图像集)。 ..我希望自己清楚明白

*编辑我找到了问题的答案..

SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                             FROM xbrygame_scrnsmkv 
                             WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                             FROM xbrygame_scrnsmkv 
                                                             ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
   GROUP BY xbrygame_scrnsmkv.product_id

3 个答案:

答案 0 :(得分:3)

你可以重新设计你的桌子还有一个计数器:

ID    product_id  consecutive
 8      bat         1
 9      bat         2
10      abc         1
11      cat         1
12      dog         1
13      dog         2

插入表格时,首先检查最后一个条目及其连续计数器。如果要插入相同的元素,请增加计数器,否则插入1.类似于:

INSERT INTO Table (product_id, consecutive) VALUES
('newProd', CASE (SELECT product_id FROM Table WHERE ID = MAX(ID))
              WHEN 'newProd' THEN
                           (SELECT consecutive FROM Table WHERE ID = MAX(ID)) + 1
              ELSE 1
            END);

然后您可以选择:

SELECT product_id, consecutive
FROM Table
WHERE ID IN
  (SELECT MAX(ID)
   FROM Table
   GROUP BY product_id)

原始答案是:

SELECT Filename, COUNT(Filename) as Count
FROM Table
GROUP BY Filename

答案 1 :(得分:1)

如果您只想要“新添加”记录,则必须以某种方式指示新添加的记录是什么。您的dbms可能默认支持所有记录的约会(我有一个暗示Ingres可能会这样做,但我可能想象它 - 我已经使用它已经有一段时间了),但你可能需要添加一些东西到划船。

你可以添加一个日期时间字段来过滤,然后你可以像Zed那样做:

SELECT Filename, COUNT(Filename) as Count
FROM Table
WHERE DateAdded > (FilterDate)
GROUP BY Filename

编辑,其中FilterDate是DateTime,在此之后您认为记录是新的,例如您可以将此设置为现在减去60分钟 - 语法将根据DBMS而改变)

或者你可以添加一个'new'标志位列并为每个新记录设置为true,它们在读取之后将其关闭或者是一些任意间隔。

答案 2 :(得分:0)

SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                             FROM xbrygame_scrnsmkv 
                             WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                             FROM xbrygame_scrnsmkv 
                                                             ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
   GROUP BY xbrygame_scrnsmkv.product_id