2
問題,我有這個表中的SQL Server 2008:的SQL Server:用最大,並在第
create table [hFUNDASSET]
(
[hFundAssetID] numeric(19,0) identity not null,
[fundAssetID] numeric(19,0) not null,
[modified] datetime not null,
primary key ([hFundAssetID])
);
它的歷史表,我們的目標是讓基於給定的最大modified
列時間戳最接近hFundAssetID
,爲每個不同的fundAssetID
。
下面的查詢獲取正確的最新modified
每個fundAssetID
:
select max(modified), fundAssetID
from hFundAsset
where fundAssetID IN
(
select distinct (fundAssetID)
from hFundAsset where modified < 'April 20, 2010 11:13:00'
)
group by fundAssetID;
我不能把hFundAssetID
SELECT子句中沒有它的group by
,這將返回多餘的行爲。不知何故,我需要hFundAssetID
與上述查詢中返回的modified, fundAssetID
對中的每一個匹配,或者等同。但SQL Server根據他們的文檔不允許多個IN子句的值:
「subquery - 是一個子查詢,其結果集爲一列 該列必須與test_expression具有相同的數據類型。 「
谷歌搜索顯示'存在'和連接通常在這些情況下與mssql一起使用,但我已經嘗試使用'max'和'group by',並且遇到問題使其工作。任何幫助讚賞。
尼斯使用RANK的()。 2005年補充說,我非常高興。 – RThomas 2011-06-01 20:35:36
值得一提的是,如果您的數據恰好有多行,並且修改日期和fundAssetID完全相同,那麼您的結果中可能會出現多行,並且使用相同的fundAssestID但不同的hFundAssestID。如果不需要,可以使用ROW_NUMBER()。雖然答案很好。 – TKTS 2011-06-01 21:08:21
完美的工作。非常感謝您的快速和有益的迴應!我需要一些時間來理解它,但我確實學到了很多:-)。編輯:我會在我們的測試期間看看ROW_NUMBER建議,謝謝。 – iksrazal 2011-06-01 21:23:12