none
如何根据时间选择相应的行? RRS feed

  • 问题


  •  
    如何根据时间选择相应的行?
        ContractTable(合同表)包含下列字段:1、ContractNumber(合同号,主键,Nvarchar);2、City(所在城市,Nvarchar);3、Road(所在路段,Nvarchar);4、Address(门牌号,Nvarchar);5、LeaseDateTo(合同终止时间,Date);6、MonthRent(月租金)。
       
       -其中City、Road、Address这3个值相加后得到完整的某个门面的地址在这个地址的基础上和租赁户签合同。合同签订有时间的先后,也就是根据LeaseDateTo(合同终止时间)来排列
       -  我的问题是:同一个门面随着时间的推移会签订越来越多的合同,那么,我该如何设置筛选条件,使得只显示最新的合同呢?

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年10月9日 10:59

答案

  • 試試看下列的程式碼:

    declare @ContractTable Table
    (
    	ContractNumber Nvarchar(10) primary key 
    	,City Nvarchar(10)
    	,Road Nvarchar(10)
    	,[Address] Nvarchar(10)
    	,LeaseDateTo Date
    	,MonthRent int
    )
    
    insert into @ContractTable values ('NO1','City1','Road1','Add1','20110101',100)
    													,('NO2','City2','Road2','Add2','20110202',200)
    													,('NO3','City3','Road3','Add3','20110303',300)
    													,('NO4','City4','Road4','Add4','20110404',400)
    													,('NO5','City1','Road1','Add1','20110501',500)
    													,('NO6','City2','Road2','Add2','20110601',100)
    													,('NO7','City3','Road3','Add3','20110701',200)
    													,('NO8','City4','Road4','Add4','20110801',300)
    													,('NO9','City1','Road1','Add1','20110901',400)
    													,('NO10','City2','Road2','Add2','20111001',500)
    													,('NO11','City3','Road3','Add3','20111101',100)
    													,('NO12','City4','Road4','Add4','20111201',200)
    													,('NO13','City1','Road1','Add1','20110102',300)
    													,('NO14','City2','Road2','Add2','20110203',400)
    													,('NO15','City3','Road3','Add3','20110304',500)
    		
    --依照門面做群組之後取最大的LeaseDateTo												
    select City+Road+[Address],MAX(LeaseDateTo)
    from @ContractTable
    group by City+Road+[Address]
    
    --驗證
    select *
    from @ContractTable
    where City+Road+[Address] = 'City2Road2Add2'
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年10月10日 12:21

全部回复

  • 这样?

    Select Top 1 * from ContractTable Order by LeaseDateTo DESC


    Shadowと愉快なコード達
    2011年10月9日 13:36
  •     这样整个屏幕只能显示一个合同号啊。

        实际上是有多个门面,每个门面又有因为时间关系,签订过几次合同,现在我要显示每个门面最新的合同该怎么做呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年10月9日 14:07
  •     这样整个屏幕只能显示一个合同号啊。

        实际上是有多个门面,每个门面又有因为时间关系,签订过几次合同,现在我要显示每个门面最新的合同该怎么做呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    以下程式碼示範如何以系統日期對ContractTable進行篩選:

     

    Select * from ContractTable
    where LeaseDateTo = Date()
    
    


    或是你要取得ContractTable中最近的一筆LeaseDateTo 的資料,可以改用下列程式碼:

    Select * from ContractTable
    where LeaseDateTo =
    (select max(LeaseDateTo) from ContractTable)


     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年10月10日 1:12
  •     以下程式碼示範如何以系統日期對ContractTable進行篩選:

     

    Select * from ContractTable
    where LeaseDateTo = Date()
    
    


    或是你要取得ContractTable中最近的一筆LeaseDateTo 的資料,可以改用下列程式碼:

     

    Select * from ContractTable
    where LeaseDateTo =
    (select max(LeaseDateTo) from ContractTable)
    


     

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
        还是只显示一个门面的最新数据!我有很多个门面啊!问题没有解决
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年10月10日 5:36
  • 試試看下列的程式碼:

    declare @ContractTable Table
    (
    	ContractNumber Nvarchar(10) primary key 
    	,City Nvarchar(10)
    	,Road Nvarchar(10)
    	,[Address] Nvarchar(10)
    	,LeaseDateTo Date
    	,MonthRent int
    )
    
    insert into @ContractTable values ('NO1','City1','Road1','Add1','20110101',100)
    													,('NO2','City2','Road2','Add2','20110202',200)
    													,('NO3','City3','Road3','Add3','20110303',300)
    													,('NO4','City4','Road4','Add4','20110404',400)
    													,('NO5','City1','Road1','Add1','20110501',500)
    													,('NO6','City2','Road2','Add2','20110601',100)
    													,('NO7','City3','Road3','Add3','20110701',200)
    													,('NO8','City4','Road4','Add4','20110801',300)
    													,('NO9','City1','Road1','Add1','20110901',400)
    													,('NO10','City2','Road2','Add2','20111001',500)
    													,('NO11','City3','Road3','Add3','20111101',100)
    													,('NO12','City4','Road4','Add4','20111201',200)
    													,('NO13','City1','Road1','Add1','20110102',300)
    													,('NO14','City2','Road2','Add2','20110203',400)
    													,('NO15','City3','Road3','Add3','20110304',500)
    		
    --依照門面做群組之後取最大的LeaseDateTo												
    select City+Road+[Address],MAX(LeaseDateTo)
    from @ContractTable
    group by City+Road+[Address]
    
    --驗證
    select *
    from @ContractTable
    where City+Road+[Address] = 'City2Road2Add2'
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年10月10日 12:21