2013-01-23 69 views
0

更新更加清晰SQL - 集團按Select查詢是接近,但我需要使它稍微獨特

SQL Sever的2000年。我試圖讓這個查詢稍微獨特。

查詢:

USE MyDatabase 
GO 

SELECT MAX(x.provider_entry_id) as provider_entry_id, -- this ID is the PK 
    x.provider_entry_type_id, -- the entry for the specific provider type (the ID) 
    x.provider_entry, -- the actual provider entry (the ID) 
    x.provider_entry_visit_dt -- the date the entry was created 
FROM tbl_claimant_provider_entry x 
JOIN (SELECT p.provider_entry_type_id, 
      p.provider_entry, 
      MAX(provider_entry_visit_dt) AS max_date 
     FROM tbl_claimant_provider_entry p 
     WHERE provider_entry_clmnt = 4963 -- change this for you user 
     GROUP BY p.provider_entry_type_id, p.provider_entry) y ON y.provider_entry_type_id = x.provider_entry_type_id 
          AND y.max_date = x.provider_entry_visit_dt 
GROUP BY x.provider_entry_type_id, x.provider_entry, x.provider_entry_visit_dt 

回報:

provider_entry_id provider_entry_type_id provider_entry provider_entry_visit_dt 
1052    109      1088   2013-01-22 00:00:00.000 
1051    109      1665   2013-01-23 00:00:00.000 
1049    130      264    2013-01-01 00:00:00.000 
1050    130      1126   2013-01-02 00:00:00.000 
1045    132      NULL   2013-01-22 00:00:00.000 
1047    132      260    2013-01-22 00:00:00.000 
1044    132      1115   2013-01-10 00:00:00.000 
1048    132      1130   2013-01-22 00:00:00.000 
1043    142      1356   2013-01-10 00:00:00.000 

我期待縮小這個名單給我根據最近的每個唯一provider_entry_type_id只有一個實例provider_entry_visit_dt

所以結果會是(請記住,不需要爲provider_entry_visit_dt提供tie-breakers,這只是一個錯誤對我而言):

provider_entry_id provider_entry_type_id provider_entry provider_entry_visit_dt 
1051    109      1665   2013-01-23 00:00:00.000 
1050    130      1126   2013-01-02 00:00:00.000 
1048    132      1130   2013-01-22 00:00:00.000 
1043    142      1356   2013-01-10 00:00:00.000 
+3

使用'distinct'?我們需要更多關於兩種選擇中的哪一種的信息。 – JonH

+2

那麼你需要哪個provider_entry和created_date? –

+0

@JonH尋找provider_entry_type_id – Macness

回答

0

這裏是一個工作的解決方案,感謝所有那些試圖幫助:

SELECT b.* 
FROM dbo.tbl_claimant_provider_entry AS b 
INNER JOIN 
      (SELECT provider_entry_type_id, MAX(provider_entry_visit_dt) AS maxdate 
          FROM dbo.tbl_claimant_provider_entry 
          GROUP BY provider_entry_type_id) AS m ON b.provider_entry_type_id = m.provider_entry_type_id AND b.provider_entry_visit_dt = m.maxdate 
WHERE (b.provider_entry_clmnt = 4963) 
1

我認爲你需要刪除外GROUP BY條款

SELECT x.* 
FROM tbl_claimant_provider_entry x 
     INNER JOIN 
     (
      SELECT p.provider_entry_type_id, 
        MAX(created_date) AS max_date 
      FROM tbl_claimant_provider_entry p 
      WHERE provider_entry_clmnt = 4963 -- change this for you user ID 
      GROUP BY p.provider_entry_type_id 
     ) y ON y.provider_entry_type_id = x.provider_entry_type_id AND 
       y.max_date = x.created_date 
+0

這給了我相同的記錄集(當然還有表中的所有列)。 – Macness

1

你需要通過語句從組中刪除CREATED_DATE。您可以在其上放置一個函數,將其留在查詢中(即像您對provider_entry_id的功能)。例如:

SELECT MAX(x.provider_entry_id) as provider_entry_id, -- this ID is the PK 
     MAX(x.created_date), 
     x.provider_entry_type_id, -- the entry for the specific provider type (the ID) 
     MIN(x.provider_entry) -- the actual provider entry (the ID) 
    FROM tbl_claimant_provider_entry x 
    JOIN (SELECT p.provider_entry_type_id, 
       p.provider_entry, 
       MAX(created_date) AS max_date 
      FROM tbl_claimant_provider_entry p 
      WHERE provider_entry_clmnt = 4963 -- change this for you user ID 
     GROUP BY p.provider_entry_type_id, p.provider_entry) y ON y.provider_entry_type_id = x.provider_entry_type_id 
           AND y.max_date = x.created_date 
GROUP BY x.provider_entry_type_id 
+0

此錯誤爲:列'x.created_date'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – Macness

+1

您需要將其包裝在一個聚合函數中。在我的例子中,我使用了Max(x.created_date)。對不起,我沒有更好地指出。 –

+0

原諒我的無知。我知道什麼是聚合函數,但我不確定如何編輯查詢。幫幫我? – Macness