我被要求从两个表格中提取数据,但是现在还不能解决这个问题,而且在这一点上它有点过头了,可以真正使用一些帮助。
两个表,不完全是父/子关系(至少在我有限的理解中),并且没有我看到的主键(没有设置数据库,所以如果你认为它会有助于添加免费这么说)。
表#1包含服务器名称,共享名称,共享路径,共享所有者和权限。服务器名称,共享名称,所有者和权限可以是重复的。服务器名称和路径的组合是每条记录的唯一性(应该是复合键吗?)。路径可以嵌套(D:\ Folder1 \是路径,以及D:\ Folder1 \ Folder2;例如见下文)
表#1 - 股票
Servername ShareName Path Owner Permissions
-----------------------------------------------------------------
Server01 Share01 D:\Folder1 jsmith Everyone
Server01 Share02 D:\Folder2 jsmith jsmith,ssmith
Server01 Share03 D:\Folder2\A jdoe jdoe,jsmith
Server02 Share01 E:\Folder1 ksmith ksmith,jdoe
Server03 Share01 G:\Folder1 jsmith Everyone
Server03 Share02 C:\Folder1 jsmith Everyone
表#2是这些服务器上列出的文件的细分。此列表还可以包括表#1中未列出的文件路径。每个文件记录都是唯一的,但文件名/路径/扩展名/修改日期本身不是。
表#2 - FileInfo
Hostname Filename FolderPath FileExtension LastModified
-----------------------------------------------------------------
Server01 FileA.txt D:\Folder1 txt 1/1/1900
Server01 FileB.log D:\Folder2 log 2/1/2000
Server01 FileC.ini D:\Folder2\A ini 3/1/2001
Server02 FileD.xls E:\Folder1 xls 3/2/2010
Server03 FileE.exe G:\Folder1 exe 3/2/2011
Server03 FileF.ppt C:\Folder1 ppt 5/10/1998
从这两个我希望能够查询和获取两者的信息。例如,对于表#1中列出的每个路径,表#2中该路径的所有文件的最早LastModified日期是什么。
表#1中有大约160k行,表#2中有1.1亿行,所以我不确定是否强制采用任何特定方法?
答案 0 :(得分:1)
如果我正确理解了这个问题,你只需要使用每个表中的两列来进行简单的连接:
SELECT
Shares.Servername,
Shares.Path,
MIN(FileInfo.LastModified)
FROM Shares
INNER JOIN FileInfo ON
Shares.Servername = FileInfo.Hostname AND
Shares.Path = FileInfo.FolderPath
GROUP BY
Shares.Servername,
Shares.Path
答案 1 :(得分:0)
你能用公共表格表达式做这样的事情:
;with t2 as (
select *,
row_number() over(partition by FolderPath order by LastModified asc) as RowNum
from Table2)
select t2.LastModified, t1.Path
from t2
inner join Table1 t1 on t2.FolderPath = t1.Path
where RowNum = 1