Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何从上个月的group by中获取值以在当前group by中使用?_Sql - Fatal编程技术网

SQL如何从上个月的group by中获取值以在当前group by中使用?

SQL如何从上个月的group by中获取值以在当前group by中使用?,sql,Sql,您如何获得同一行中今年的潜在客户数和去年的潜在客户数。我需要的查询更复杂,但这是第一步 输出 Year,Count,Last Year Count 2016,55,88 2017,77,55 2018,83,77 谢谢您可以尝试左键加入分组子查询 SELECT x.year, x.count, y.count last_year_count FROM (SELECT l1.year, count(l1.leadi

您如何获得同一行中今年的潜在客户数和去年的潜在客户数。我需要的查询更复杂,但这是第一步

输出

Year,Count,Last Year Count
2016,55,88
2017,77,55
2018,83,77

谢谢

您可以尝试左键加入分组子查询

SELECT x.year,
       x.count,
       y.count last_year_count
       FROM (SELECT l1.year,
                    count(l1.leadid) count
                    FROM leads l1
                    GROUP BY l1.year) x
            LEFT JOIN (SELECT l1.year,
                              count(l1.leadid) count
                              FROM leads l1
                              GROUP BY l1.year) y
                      ON y.year = x.year - 1;
如果您的DBMS支持CTE,您也可以使用CTE而不是循环子查询

WITH cte
AS
(
SELECT l1.year,
       count(l1.leadid) count
       FROM leads l1
       GROUP BY l1.year
)
SELECT x.year,
       x.count,
       y.count last_year_count
       FROM cte x
            LEFT JOIN cte y
                      ON y.year = x.year - 1;

可以对第一次选择的结果执行联接。所以你可以做:

SELECT 
   L1.Year,
   count(L1.LeadId), 
   count(L2.LeadId) 
FROM Leads L1
LEFT JOIN Leads L2 on L1.Year = L2.Year+1
Group by Year
使用ISO/ANSI标准滞后功能:

SELECT l.Year, count(*),
       LAG(COUNT(*)) OVER (ORDER BY l.YEAR) as prev_year
FROM Leads l
GROUP BY l.Year;

与其他方法相比,这应该具有最好的性能。

您使用的是什么RDBMs?您可能希望将其更改为左联接,以便第一行为null,而不是被删除。谢谢Sean,不幸的是,这正是我所尝试的,它无法工作。Sticky Bit的回答非常有效。谢谢Gordon,这看起来很棒。不幸的是,Zoho报告Sql不支持这一点。在使用其他SQL程序时,我会记下它。
SELECT l.Year, count(*),
       LAG(COUNT(*)) OVER (ORDER BY l.YEAR) as prev_year
FROM Leads l
GROUP BY l.Year;