簡體   English   中英

如何使用SQL Server獲得具有有效日期的記錄百分比?

[英]How to get the percentage of records with valid date using SQL Server?

我有一張桌子說產品

Id  ProductName DueDate
---------------------------
1   A           9999-12-31
2   B           9999-12-31
3   C           9999-12-31   
4   D           2017-08-10  
and so on  

我必須計算有效截止日期(忽略9999-12-31)的行百分比是否大於60%。 還從具有有效日期的表中獲取所有ID。

我試圖使用SUM和case條件來獲取百分比。 我也該如何獲取ID。 我嘗試了Sub查詢。 還有其他方法嗎?

您可以使用窗口功能來完成此任務。 注意,如果需要,您也可以在over clause使用partition by (例如,按乘積進行計算)。

SQL小提琴

MS SQL Server 2014架構設置

CREATE TABLE Table1
    ([Id] int, [ProductName] varchar(1), [DueDate] datetime)
;

INSERT INTO Table1
    ([Id], [ProductName], [DueDate])
VALUES
    (1, 'A', '9999-12-31 00:00:00'),
    (2, 'B', '9999-12-31 00:00:00'),
    (3, 'C', '9999-12-31 00:00:00'),
    (4, 'D', '2017-08-10 00:00:00'),
    (5, 'D', '2017-08-10 00:00:00'),
    (6, 'D', '2017-08-10 00:00:00'),
    (7, 'D', '2017-08-10 00:00:00'),
    (8, 'D', '2017-08-10 00:00:00'),
    (9, 'D', '2017-08-10 00:00:00'),
    (10, 'D', '2017-08-10 00:00:00')
;

查詢1

select
    *
from (
    select
        *
        , case when DueDate <> '99991231' then 1 else 0 end as is_valid
        , (count(case when DueDate <> '99991231' then DueDate end) over() * 1.0)
          / count(*) over() as pct
    from table1
    ) d
where is_valid = 1

結果

| Id | ProductName |              DueDate | is_valid | pct |
|----|-------------|----------------------|----------|-----|
|  4 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
|  5 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
|  6 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
|  7 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
|  8 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
|  9 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |
| 10 |           D | 2017-08-10T00:00:00Z |        1 | 0.7 |

暫無
暫無

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

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