2
SELECT     TOP (100) PERCENT dbo.vwLatestEquipment.equipServID, dbo.tblEquipInvoice.invoiceDateSent, dbo.tblEquipment.equipManafacturer, 
                  dbo.tblEquipInvoice.contractNumber, dbo.tblEquipment.equipmentID, dbo.tblEquipment.equipStatus, dbo.tbl_work_locations.work_location, 
                  dbo.vwLatestEquipment.calibDueDate
FROM         dbo.vwLatestEquipment INNER JOIN
                  dbo.tblEquipLocations ON dbo.vwLatestEquipment.locationID = dbo.tblEquipLocations.locationID INNER JOIN
                  dbo.tblEquipInvoice ON dbo.tblEquipLocations.invoiceID = dbo.tblEquipInvoice.invoiceID INNER JOIN
                  dbo.tblEquipment ON dbo.vwLatestEquipment.equipServID = dbo.tblEquipment.equipServID INNER JOIN
                  dbo.tbl_work_locations ON dbo.tblEquipInvoice.workLocationID = dbo.tbl_work_locations.work_id
GROUP BY dbo.tbl_work_locations.work_location, dbo.vwLatestEquipment.equipServID, dbo.tblEquipInvoice.invoiceDateSent, dbo.tblEquipment.equipManafacturer, 
                  dbo.tblEquipInvoice.contractNumber, dbo.tblEquipment.equipmentID,       dbo.tblEquipment.equipStatus, dbo.tbl_work_locations.work_location, 
                  dbo.vwLatestEquipment.calibDueDate
ORDER BY dbo.vwLatestEquipment.equipServID

これは私の後継者から渡されたものです。上のビューは、equipmentIDのすべてのアイテムのcalibDateDueのすべての値を返すことを除いて、目的のために正常に機能しています。必要なのは、の各アイテムの最新のcalibDueDateを返すことだけです。機器(equipmentID)私は揚げ物であり、あまり前進できないので、今日はどんな助けもいただければ幸いです。

4

1 に答える 1

1

私が欲しいのは、機器の各項目 (equipmentID) の最新の calibDueDate を返すことです。

を使用しているためTOP (100) PERCENT、SQL Server を使用していると仮定します。次に、ランキング機能を使用できます。

ROW_NUMBER() OVER(PARTITION BY equipmentID
                  ORDER BY calibDueDate DESC) 

次に、次のように、ランク = 1 の行のみを選択します。

;WITH CTE 
AS
(
    SELECT 
      dbo.vwLatestEquipment.equipServID, 
      dbo.tblEquipInvoice.invoiceDateSent, 
      dbo.tblEquipment.equipManafacturer, 
      dbo.tblEquipInvoice.contractNumber, 
      dbo.tblEquipment.equipmentID, 
      dbo.tblEquipment.equipStatus, 
      dbo.tbl_work_locations.work_location, 
      dbo.vwLatestEquipment.calibDueDate,
      ROW_NUMBER() OVER(PARTITION BY equipmentID 
                        ORDER BY calibDueDate DESC) row_num
    FROM dbo.vwLatestEquipment 
    INNER JOIN dbo.tblEquipLocations 
            ON dbo.vwLatestEquipment.locationID=dbo.tblEquipLocations.locationID 
    INNER JOIN dbo.tblEquipInvoice
            ON dbo.tblEquipLocations.invoiceID=dbo.tblEquipInvoice.invoiceID 
    INNER JOIN dbo.tblEquipment 
            ON dbo.vwLatestEquipment.equipServID=dbo.tblEquipment.equipServID
    INNER JOIN dbo.tbl_work_locations 
            ON dbo.tblEquipInvoice.workLocationID=dbo.tbl_work_locations.work_id
) 
SELECT TOP (100) PERCENT *
FROM CTE 
WHERE row_num = 1
ORDER BY equipServID;
于 2012-12-04T10:33:45.167 に答える