【发布时间】:2013-10-17 00:51:00
【问题描述】:
我确定这是一个简单的查询,但它让我难过了一段时间。我需要连接两个表并只返回每个分组的特定记录。
这是我正在使用的表格:
CREATE TABLE [dbo].[FileData](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FinDataID] [int] NULL,
[PharmacyID] [int] NULL,
[FileName] [nvarchar](150) NULL,
[FileExtension] [nvarchar](15) NULL,
[Data] [varbinary](max) NULL,
[CreateDate] [datetime] NULL,
[CreatedByID] [int] NULL,
[UpdateDate] [datetime] NULL,
[UpdatedByID] [int] NULL
CREATE TABLE [dbo].[FinData](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PharmacyID] [int] NULL,
[PeriodStart] [date] NULL,
[PeriodEnd] [date] NULL,
[SalesTotal] [money] NULL,
[SalesDisp] [money] NULL,
[SalesRetail] [money] NULL,
[GPTotal] [decimal](12, 2) NULL,
[GPRetail] [decimal](12, 2) NULL,
[GPDisp] [decimal](12, 2) NULL,
[Advertising] [money] NULL,
[Rent] [money] NULL,
[GrossWages] [money] NULL,
[Depreciation] [money] NULL,
[InterestExp] [money] NULL,
[AllOtherExp] [money] NULL,
[OwnerHours] [money] NULL,
[CreateDate] [datetime] NULL,
[CreatedByID] [int] NULL,
[UpdateDate] [datetime] NULL,
[UpdatedById] [int] NULL
这些表格包含以下示例数据:
FileData:
ID FinDataID PharmacyID yadayada
6 13 1
7 13 1
8 13 1
9 13 1
10 15 2
12 13 1
13 13 1
FinData: (where Pharmacy = 1)
ID PharmacyID PeriodStart
1 1 2012-07-01
13 1 2011-07-01
这是我最初使用的示例查询:
SELECT
FD.ID, FinData.ID AS FinDataID, FD.PharmacyID, FinData.PeriodStart, FinData.PeriodEnd, FileName, FileExtension, ISNULL(DATA,0) AS Data, FD.CreateDate, FD.CreatedByID, FD.UpdateDate, FD.UpdatedById
FROM FinData
LEFT JOIN FileData FD ON FD.FinDataID = FinData.ID
WHERE FinData.PharmacyID = @PharmacyID
ORDER BY PeriodStart desc, ID DESC
返回以下数据:
ID FinDataID PharmacyID PeriodStart yadayadayada
NULL 1 NULL 2012-07-01
13 13 1 2011-07-01
12 13 1 2011-07-01
9 13 1 2011-07-01
8 13 1 2011-07-01
7 13 1 2011-07-01
6 13 1 2011-07-01
基本上我需要该结果中每个 FinDataID 的最高记录...我知道我很接近但还没有找到解决方案!提前致谢!
【问题讨论】:
-
你考虑过使用 max() 函数吗?
-
示例输入数据和预期结果将有助于了解您要查找的内容。我认为错误查询的数据输出没有帮助。
-
抱歉,回答问题,这是在 SQL Server 2008 上。另外,Mostacho,你说得对,我应该包含示例数据但没有,因为我认为我现有的查询可以用作子查询...我现在将示例数据放入以供后代使用。