我有一个名为batch的表。表结构就像这样
我已经尝试了很多来编写这个查询,但从来没有得到过这个结果。我喜欢
select distinct a.batchid from(select batchid,bsdate,bstrength from batch)a
inner join
(select batchid,bsdate,bstrength from batch) b on date(a.bsdate)=date(b.bsdate) and a.bstrength=b.bstrength;
select a.batchid,a.bsdate,b.bstrength from batch a join batch b on date(a.bsdate)=date(b.bsdate) and a.bstrength=b.bstrength;
请帮我写这个查询。
答案 0 :(得分:1)
SELECT a.batchid a, b.batchid b
FROM batch a
JOIN batch b
ON CONVERT(DATE,a.bsdate) = CONVERT(DATE,b.bsdate)
AND a.bstrength = b.bstrength
AND CONVERT(INT,SUBSTRING(a.batchid,1)) < CONVERT(INT,SUBSTRING(b.batchid,1))
如果您想要时间匹配,请将转化符放在ON
行中(因为您说的是类似日期)。
这仅显示匹配的批次,那些与其他批次不匹配的批次将不会显示。如果在一条记录上进行多次匹配,您将获得多条提及同一记录的记录。
最后一行阻止了自身匹配以及重复,如:
a b
b001 b002
b002 b001