简体   繁体   English

比较mysql表上的行

[英]comparing rows on a mysql table

Ok here's the deal I got one table with a bunch of client information. 好的,这笔交易我得到了一张包含大量客户信息的表格。 Each client makes up to one purchase a year which is represented by an individual row. 每个客户每年最多进行一次购买,由一行代表。 there's a column for the year and there's a column the contains a unique identifier for each client. 这一年有一列,并且有一列包含每个客户的唯一标识符。 What I need to do is to construct a query that takes last year and this year and shows me which clients were here made a purchase last year but not make a purchase this year. 我需要做的是构建一个去年和今年的查询,并告诉我去年哪些客户在这里购买但今年没有购买。

I also need to build a query that shows me which clients did not make a purchase last year and the year before last but did make a purchase this year. 我还需要构建一个查询,告诉我去年和前年哪些客户没有购买,但今年确实购买了。

Given this table: 鉴于此表:

Purchase
========
PurchaseID (autoincrement int PK)
ClientID (int FK)
Year (int)
Amount (float)

Sample data: 样本数据:

insert into Purchase (ClientID, Year, Amount) values (1, 2009, 123)
insert into Purchase (ClientID, Year, Amount) values (2, 2009, 123)
insert into Purchase (ClientID, Year, Amount) values (2, 2010, 123)
insert into Purchase (ClientID, Year, Amount) values (3, 2010, 123)
insert into Purchase (ClientID, Year, Amount) values (3, 2007, 123)
insert into Purchase (ClientID, Year, Amount) values (4, 2010, 123)
insert into Purchase (ClientID, Year, Amount) values (4, 2008, 123)

Made a purchase in 2009 but not the following year (2010): 在2009年购买但未在次年(2010年)购买:

select p1.*
from Purchase p1
left outer join Purchase p2 on p1.ClientID = p2.ClientID and p1.Year = p2.Year - 1
where p2.ClientID is null
    and p1.Year = 2009

Results: 结果:

PurchaseID  Year        ClientID    Amount
----------- ----------- ----------- ---------------------
1           2009        1           123.00

Made a purchase in 2010, but not the two previous years (2008 or 2009): 在2010年购买,但不是前两年(2008年或2009年):

select p3.*
from 
Purchase p3
left outer join Purchase p2 on p3.ClientID = p2.ClientID and p3.Year = p2.Year + 1
left outer join Purchase p1 on p3.ClientID = p1.ClientID and p3.Year = p1.Year + 2
where p2.ClientID is null
    and p1.ClientID is null
    and p3.Year = 2010

Results: 结果:

PurchaseID  Year        ClientID    Amount
----------- ----------- ----------- ---------------------
4           2010        3           123.00

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM