繁体   English   中英

SQL查询找到最大日期

[英]SQL Query to find MAX Date

我有一些将dBase4用于其数据库的软件。 我正在尝试使用3个表格(客户,服务和历史记录)中的字段构建报告。

在所有表中,ACCOUNT字段均相同。 每个客户的“客户”和“服务”表只有一个记录。 “历史记录”表具有每个客户的多个记录。

我需要编写一个查询,以便仅为每个客户返回在“ History.BILLTHRU”中具有最大日期的记录。 下面的代码返回“历史记录”表中每个客户的所有记录:

SELECT Customer.ACCOUNT, 
       Customer.FIRSTNAME, 
       (more fields...), 
       History.ACCOUNT, 
       History.BILLTHRU, 
       Service.ACCOUNT, 
       Service.OFFERCODE

FROM "C:\Customer.dbf" Customer

INNER JOIN "C:\History.dbf" History 
ON (Customer.ACCOUNT = History.ACCOUNT)

INNER JOIN "C:\Service.dbf" Service 
ON (Customer.ACCOUNT = Service.ACCOUNT) 

WHERE Customer.STATUS = "A" 
ORDER BY Customer.LAST_BUS_NAME 

使用子查询和分组依据:

SELECT Customer.ACCOUNT, 
       Customer.FIRSTNAME, 
       (more fields...), 
       History.ACCOUNT, 
       History.BILLTHRU, 
       Service.ACCOUNT, 
       Service.OFFERCODE

FROM "C:\Customer.dbf" Customer

INNER JOIN (SELECT ACCOUNT, MAX(BILLTHRU) AS BILLTHRU
            FROM "C:\History.dbf"
            GROUP BY ACCOUNT) History
ON (Customer.ACCOUNT = History.ACCOUNT)

INNER JOIN "C:\Service.dbf" Service 
ON (Customer.ACCOUNT = Service.ACCOUNT) 

WHERE Customer.STATUS = "A" 
ORDER BY Customer.LAST_BUS_NAME 

我喜欢使用公用表表达式(CTE) 子查询很好,但是像这样将其分解有时会更容易分开。

with GetMaxDate as (

select account, max(billthru) as MaxBillThru
       from  "C:\History.dbf"
       group by account
)

SELECT Customer.ACCOUNT, 
       Customer.FIRSTNAME, 
       (more fields...), 
       GetMaxDate.ACCOUNT, 
       GetMaxDate.MaxBillThru,
       Service.ACCOUNT, 
       Service.OFFERCODE
       .....
from FROM "C:\Customer.dbf" Customer

INNER JOIN GetMaxDate on customer.ACCOUNT = GetMaxDate.Account
INNER JOIN "C:\Service.dbf" Service 
ON (Customer.ACCOUNT = Service.ACCOUNT) 

WHERE Customer.STATUS = "A" 
ORDER BY Customer.LAST_BUS_NAME 

编辑:这是一个SQL Server函数。 我将离开它,以防它可以帮助您或其他人。 如果将问题笼罩起来,我将其删除。

暂无
暂无

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

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