我有一个有4列的表
PKID,OutMailID,JobMailingDate,InsertDatetime 这是将数据插入表中的方式 PKID是表的主键 对于带有JObMailingDate的单个outMailID,表中存在avg 3记录 不同的插入日期时间。该表有数百万条记录
我有许多其他表具有相同的数据,但这些表属于不同的类别
现在我想找出答案 1)查找所有OutMailID,其中InsertDatetime位于参数数据范围之间 2)一旦我有OutMailID列表,我想找到所有这些OutMailID的最小InsertDatetime,其中此最小日期介于Param 1和Param2之间
表的数据是这样的
Select 1 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/01' as InsertDatetime
UNION ALL
Select 2 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/02' as InsertDatetime
UNION ALL
Select 3 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/03' as InsertDatetime
UNION ALL
Select 4 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/04' as InsertDatetime
我想在一个查询中执行以上所有2个步骤,所以我的查询就像这样
Select
OutMailID,Min(InsertDatetime)
from
Table T
INNER JOIN
(
Select
OutMailID
from
Table
Where
InsertDatetime Between @Param1 and @Param2
) as T1 On (T1.OutMailID = T.outMailID)
Group by
OutMailID
Having Min(InsertDatetime) Between Between @Param1 and @Param2
但这并不是表现良好。任何人都可以建议我这样做的好方法
第二个问题是,一旦我有第一个查询的输出,那么我使用相同的上述查询为其他类别找出该类别中的最小InsertDatatime,一旦我拥有所有类别的所有最小日期然后我有在所有类别中找到最小插入日期
你能帮帮我吗
由于 阿图尔
答案 0 :(得分:0)
如何在这个msbuild /p:ContinueOnError=ErrorAndContinue /p:Configuration=Debug OpenCV.sln
语句中使用,with
就像保存缓存中的所有内容以供日后使用的视图一样,这是一个例子
with
这样,您可以多次重复使用with Table1 as (
Select OutMailID from Table Where InsertDatetime Between @Param1 and @Param2
),
Table2 as (
Select 4 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/04' as InsertDatetime
)
select * from Table as T
inner join Table1 as T1 on T1.OutMailID = T.outMailID
group by T.OutMailID
而无需再次重新查询。
答案 1 :(得分:0)
此查询是否能为您提供所需的结果?
选择T.OutMailID,Min(T.InsertDatetime) 来自表T INNER JOIN表T1在T1.OutMailID = T.outMailID上 T2.InsertDatetime介于@ Param1和@Param2之间 由OutMailID分组