【问题标题】:Selecting all records except the very first选择除第一条记录之外的所有记录
【发布时间】:2011-02-15 12:40:06
【问题描述】:

我有一个包含客户的表和另一个包含该客户结果的表。

一个客户可以有很多结果。

我希望能够首先仅选择在 CustResults 中有多个条目的客户,然后从中选择除第一个之外的所有记录...

到目前为止,我有这个,它检索具有多个结果的客户,但我不知道如何然后再输入第一个结果。

SELECT * FROM CustResults cp 
JOIN Customer c ON c.CustomerID = cp.CustomerID
WHERE
(SELECT count(CustomerID) as cpid 
 FROM CustResults WHERE CustomerID = cp.CustomerID GROUP BY CxID) > 1

丽塔:结果 1 苏:结果 1,结果 2,结果 3,结果 4 鲍勃:结果 1,结果 2,结果 3

我只想要 Sue 和 Bob,因为 Rita 只有一个结果,而 Sue 和 Bob 我只想查看结果 2,3,4

有什么想法吗?

谢谢

添加更多信息:

这是我的确切查询:

选择计数(cp.CxID)作为 intSmokers FROM CustPrimarySmoking cp 加入客户 c ON cp.CxID = c.CustomerID WHERE (SELECT count(CustPrimarySmokingID) as cqpid FROM CustPrimarySmoking WHERE CxID = cp.CxID GROUP BY CxID) > 1

显然,我可以只使用 LIMIT 1, 99999,因为查询只返回一个值(计数)。

我希望计数使用在 CustPrimarySmoking 中有多个记录的客户,但忽略第一个条目。

还有什么想法吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    愚蠢且不那么灵活(但是,它应该在大部分时间all都有效)...

    LIMIT 1, 999999999;
             ^ to ensure all rows are returned
    

    【讨论】:

      【解决方案2】:

      您是否尝试在查询末尾添加“OFFSET 1”?

      【讨论】:

        【解决方案3】:

        如果您所追求的只是计数而不是实际记录,那么您只需从已有的计数中减去客户数量(因为您已经确定每个客户至少有一条记录),即

        SELECT count(cp.CxID)-count(DISTINCT cp.CxID) as intSmokers
        FROM CustPrimarySmoking cp
        JOIN Customer c ON cp.CxID = c.CustomerID
        WHERE (
          SELECT count(CustPrimarySmokingID) as cqpid
          FROM CustPrimarySmoking WHERE CxID = cp.CxID
          GROUP BY CxID
          ) > 1
        

        如果你在实际的行之后,这个怎么样:

            SELECT * FROM Customer;
            +------------+------+
            | CustomerID | name |
            +------------+------+
            |          1 | Rita |
            |          2 | Sue  |
            |          3 | Bob  |
            |          4 | Jack |
            +------------+------+
        
        
            SELECT * FROM CustPrimarySmoking;
        
            +----------------------+------+-------------------+
            | CustPrimarySmokingID | CxID | result            |
            +----------------------+------+-------------------+
            |                    1 |    1 | Result 1 for Rita |
            |                    2 |    2 | Result 1 for Sue  |
            |                    3 |    2 | Result 2 for Sue  |
            |                    4 |    2 | Result 3 for Sue  |
            |                    5 |    2 | Result 4 for Sue  |
            |                    6 |    3 | Result 1 for Bob  |
            |                    7 |    3 | Result 2 for Bob  |
            |                    8 |    3 | Result 3 for Bob  |
            +----------------------+------+-------------------+
        
            SELECT * FROM CustPrimarySmoking cp
            JOIN Customer c ON cp.CxID = c.CustomerID
            WHERE CustPrimarySmokingID <> (
                SELECT CustPrimarySmokingID
                FROM CustPrimarySmoking
                WHERE CxID = cp.CxID ORDER BY CustPrimarySmokingID LIMIT 1
            );
        
        
            +----------------------+------+------------------+------------+------+
            | CustPrimarySmokingID | CxID | result           | CustomerID | name |
            +----------------------+------+------------------+------------+------+
            |                    3 |    2 | Result 2 for Sue |          2 | Sue  |
            |                    4 |    2 | Result 3 for Sue |          2 | Sue  |
            |                    5 |    2 | Result 4 for Sue |          2 | Sue  |
            |                    7 |    3 | Result 2 for Bob |          3 | Bob  |
            |                    8 |    3 | Result 3 for Bob |          3 | Bob  |
            +----------------------+------+------------------+------------+------+
        

        【讨论】:

          猜你喜欢
          • 2012-03-26
          • 2013-11-24
          • 2011-08-18
          • 1970-01-01
          • 1970-01-01
          • 2019-06-09
          • 2011-11-06
          • 1970-01-01
          • 2018-02-17
          相关资源
          最近更新 更多