1

我将如何选择c_user_id谁在 SQL Server 2008 数据库中创建了背靠背条目?

最好是那些做了超过 3 个背靠背条目的人,如下pras.chla@gmail.com所示(按c_id descc_id是一个身份列)

c_id    c_user_id             c_entry
1427    xermadr.asdf@me.com   155575
1426    pras.chla@gmail.com   155829
1425    pras.chla@gmail.com   155826
1424    pras.chla@gmail.com   155828
1423    pras.chla@gmail.com   155830
1422    sdfe.qqol@gmail.com   155559 

再次感谢 ?

4

2 回答 2

4

单程

SELECT DISTINCT c_user_id
FROM   tab t1
       CROSS APPLY (SELECT 1 AS C
                    FROM   (SELECT TOP 2 *
                            FROM   tab t2
                            WHERE  t2.c_id < t1.c_id
                            ORDER  BY t2.c_id DESC) T 
HAVING COUNT(c_user_id) = 2 AND COUNT(DISTINCT c_user_id) = 1 AND MIN(c_user_id) = t1.c_user_id) CA

或其他

WITH T AS
(
SELECT *,
       ROW_NUMBER() OVER (order by c_id) -
       ROW_NUMBER() OVER (PARTITION BY c_user_id order by c_id) AS Grp
FROM   tab t1
)
SELECT DISTINCT c_user_id
FROM T
GROUP BY c_user_id, Grp
HAVING COUNT(*) >=3
于 2012-09-28T17:42:10.340 回答
1
;WITH someUserTableWithOrderNumber as
(
SELECT ROW_NUMBER ( )  OVER (order by c_id) OrderNumber, 
    c_id, 
    c_user_id, 
    c_entry 
FROM someUserTable
)
SELECT DISTINCT a.c_user_id
FROM someUserTableWithOrderNumber a
JOIN someUserTableWithOrderNumber b on a.OrderNumber = b.OrderNumber + 1 AND a.c_user_id = b.c_user_id 
JOIN someUserTableWithOrderNumber c on b.OrderNumber = c.OrderNumber + 1 AND b.c_user_id = c.c_user_id 
JOIN someUserTableWithOrderNumber d on c.OrderNumber = d.OrderNumber + 1 AND c.c_user_id = d.c_user_id 
于 2012-09-28T17:22:58.473 回答