我要做的是找到一个日期和trans_id,其中item_nbr = 1,2和3(没有特定的顺序)。必须使用相同的trans_id找到所有3个项目。
所以表格如下:
trans_id, trans_date, item_nbr, item, price
表格如下:
trans_id--trans_date--item_nbr--item--price
1234--1/1/2015--1--item1--1.00
1234--1/1/2015--3--item3--3.00
1234--1/1/2015--2--item2--2.00
4321--1/1/2015--2--item2--2.00
结果应该是:
1/1/2015--1234
但查询应仅返回日期和trans_id。
所以这就是我到目前为止所做的,但我知道它不正确,因为它会拉回所有包含第1,2和/或3项的日期/ trans_id,而不是1,2,3 date和trans_id。
select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')
非常感谢您的帮助。
答案 0 :(得分:1)
你很亲密。只需使用sequel -C sqlite://db/production.sqlite3 postgres://user@localhost/db
和select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')
group by date, trans_id
:
group by
编辑:
如果having
未返回任何结果,则您不会在同一日期同时处理所有三个项目。
您可以考虑从select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')
group by date, trans_id
having count(distinct item) = 3;
和having count(distinct item) = 3
中移除date
。那里似乎很尴尬。我只留下它,因为它在你问题的查询中。
答案 1 :(得分:0)
你需要的是这样的东西:
awakeFromNib
让我知道这是否有效!
编辑:错误的列错了!
答案 2 :(得分:0)
select date, trans_id
from table1
where item in ('item1', 'item2', 'item3')
group by 1,2
having count(*) = 3
如果item
不唯一,则必须使用
having count(distinct item) = 3
答案 3 :(得分:0)
您可以计算不同的值
;WITH cte (trans_id) AS (
SELECT trans_id
FROM table1
Group By trans_id
Having Count(distinct item_nbr) = (Select Count(Distinct item_nbr) from table1))
Select DISTINCT trans_id, trans_date
From table1
Where trans_id IN (
Select trans_id from cte)
OR
Select DISTINCT trans_id, trans_date
From table1
Where trans_id IN (
SELECT trans_id
FROM table1
Group By trans_id
Having Count(distinct item_nbr) = (Select Count(Distinct item_nbr) from table1))
答案 4 :(得分:0)
所以,我找到了解决方案。不确定它是否效率最高,但我决定为每个项目创建一个易失性表,然后根据日期,trans_id以及我的示例中未提及的其他几个字段查询3个易失性表。
谢谢大家的帮助!