在表上匹配DATETIME和INT列的自联接

时间:2014-06-12 16:15:15

标签: sql

我有一个名为batch的表。表结构就像这样

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;

请帮我写这个查询。

1 个答案:

答案 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