簡體   English   中英

SQL查詢最近日期的計數值

[英]SQL Query for Count value from the latest date

我需要一個返回ff的查詢:

  1. 從每個名稱中的最新日期開始計數
  2. 如果最近日期的計數值為-1,則它將返回最近日期之前的日期計數
  3. 如果從最新日期算起的Count的值為-1,另一個日期為-1。 然后返回0
  4. 如果從最新日期算起的Count的值是-1,並且沒有該名稱的其他日期。 然后返回0

示例表:

ID  Name  Date         Count
1   Adj   09/29/2012   2
2   Adj   09/30/2012   4
3   Ped   09/29/2012  -1
4   Ped   09/30/2012   5
5   Mel   09/29/2012   3
6   Mel   09/30/2012  -1
7   Rod   09/30/2012   7
8   Ney   09/30/2012  -1
9   Jin   09/29/2012  -1
10  Jin   09/30/2012  -1

所需輸出:

Name   Count
Adj    4
Ped    5
Mel    3
Rod    7
Ney    0
Jin    0

我對如何在SQL中實現此方法感到非常困惑,因為我只知道簡單的查詢。

關於如何對此進行查詢的任何想法? 謝謝。

順便說一句,對不起,我忘了包括在內。 我正在使用SQL Server 2000。

嘗試這個

SQL范例

select A.name, isnull(T.[Count], 0) as [Count]
from (select distinct T.name from table1 as T) as A
    outer apply 
    (
        select top 1 T.[Count]
        from table1 as T
        where T.name = A.name and T.[Count] <> -1 
        order by T.[date] desc
    ) as T
order by A.name asc

更新 :對於SQL 2000,您可以使用像這樣的查詢

適用於SQL 2000的SQL FIDDLE示例

select A.name, isnull(T1.[Count], 0) as [Count]
from 
(
    select T.name, max(case when T.[Count] <> -1 then T.[date] else null end) as [date]
    from table1 as T
    group by T.name
) as A
    left outer join table1 as T1 on T1.name = A.name and T1.[date] = A.[date]

但這取決於您對name, [date]列具有唯一約束的建議

另一個

Select * from
(
Select Test.name,[Count]
from TEST
Join(
Select name, MAX(Date) as Date from TEST  
where [Count]<>-1
Group by Name) a
on a.Name=test.Name and a.Date=Test.Date
UNION 
Select Distinct name,0 from test o where not Exists(Select * from test where name=o.Name and [count]<>-1)
) res
order by Name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM