【发布时间】:2020-01-11 16:35:21
【问题描述】:
所以我收到了我公司某人的一些数据请求。此数据请求需要对来自多个表的多个列进行 SQL 查询,但只能是来自这些表之一的列的最新事件。这是踢球者......每个表都有一个与另一个表共享的列。所以为了得到这份“报告”,我必须一点一点地做。
在我意识到我只需要对其中一个表进行最新更新之前,我的初始查询是这样的:
SELECT a.description AS "Description",
a.pricing AS "Price",
b.id AS "ID",
c.descriptionb AS "DescriptionB",
c.date AS "date",
d.descriptionc AS "DescriptionC"
FROM database.table1 a,
database.table2 b,
database.table3 c,
database.table4 d
WHERE a.description = b.descriptive_info
AND b.id = c.comp_id
AND c.descriptionb = d.long_description
AND d.id_for_a = a.id
AND a.company IN ( '000', '001', '002', '003', '004' )
AND b.expdate >= Now()
我意识到上面的“c.date”只需要显示每个唯一 ID/DescriptionC 的最近日期。
这是初始查询的示例结果:
Description|Price |ID |DescriptionB |date |DescriptionC
---------------------------------------------------------------------
Computer |300 |554 |5% Off |3/2/2010 |Includes CPU
Computer |300 |554 |5% Off |3/2/2010 |Includes DOG
Computer |300 |554 |5% Off |3/2/2010 |Includes CAT
Computer |300 |554 |9% Off |4/3/2011 |Includes CPU
Computer |300 |554 |9% Off |4/3/2011 |Includes DOG
Computer |300 |554 |9% Off |4/3/2011 |Includes CAT
Computer |300 |554 |7% Off |9/1/2019 |Includes CPU
Computer |300 |554 |7% Off |9/1/2019 |Includes DOG
Computer |300 |554 |7% Off |9/1/2019 |Includes CAT
Printer |75 |801 |3% Off |6/3/2012 |Includes DOS
Printer |75 |801 |3% Off |6/3/2012 |Includes PIG
Printer |75 |801 |3% Off |6/3/2012 |Includes RAT
Printer |75 |801 |9% Off |8/3/2013 |Includes DOS
Printer |75 |801 |9% Off |8/3/2013 |Includes PIG
Printer |75 |801 |9% Off |8/3/2013 |Includes RAT
Printer |75 |801 |1% Off |1/3/2019 |Includes DOS
Printer |75 |801 |1% Off |1/3/2019 |Includes PIG
Printer |75 |801 |1% Off |1/3/2019 |Includes RAT
下面是 Laurenz 的查询结果:
Description|Price |ID |DescriptionB |date |DescriptionC
---------------------------------------------------------------------
Computer |300 |554 |7% Off |9/1/2019 |Includes CAT
...关闭但还没有完全到那里。
期望的结果:
Description|Price |ID |DescriptionB |date |DescriptionC
---------------------------------------------------------------------
Computer |300 |554 |7% Off |9/1/2019 |Includes CPU
Computer |300 |554 |7% Off |9/1/2019 |Includes DOG
Computer |300 |554 |7% Off |9/1/2019 |Includes CAT
Printer |75 |801 |1% Off |1/3/2019 |Includes DOS
Printer |75 |801 |1% Off |1/3/2019 |Includes PIG
Printer |75 |801 |1% Off |1/3/2019 |Includes RAT
正如您所见,“同一产品”有多个日期,具有不同描述的重复产品等。我基本上只想要每个唯一 ID/描述 C 具有最新“日期”的行。希望这比我原来的帖子更容易理解。
顺便说一句,这些是简化的示例,因为我不想给我的公司带来麻烦,但查询和概念是相同的。如果您可以多次想象多个产品具有每个产品的多个实例,那么您可以想象数据集可以有多大。我只关心每个唯一 ID/DescriptionC 的最新实例。
【问题讨论】:
-
几行数据和相应的预期输出可能会帮助我们提供更准确的答案。
-
那么您只需要最新一行的哪些组?你怎么看,哪一行比另一行新?也许显示所有表的所有字段可能会有所帮助
标签: sql postgresql date select greatest-n-per-group