我想在表格中选择新添加的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
答案 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