【问题标题】:Use SQL to display count of min and count of max within group使用 SQL 显示组内的最小计数和最大计数
【发布时间】:2016-02-23 19:56:15
【问题描述】:

目标

我正在寻找一种方法来计算等于组的最小值或最大值的项目数。我有每隔几天收到的物品,每两周输入一次。我需要查看每个 EntryDate 的 Min 和 Max ReceivedDate,以及 Min 和 Max 的项目计数。在 MS Access 中使用 SQL。

输入

tblItem

|    EntryDate    |   ReceivedDate   |
--------------------------------------
|   01/01/2016    |    16/12/2015    |
|   01/01/2016    |    15/12/2015    |
|   01/01/2016    |    10/12/2015    |
|   01/01/2016    |    10/12/2015    |
|   01/01/2016    |    10/12/2015    |
|   01/01/2016    |    10/12/2015    |
|   15/01/2016    |    05/01/2016    |
|   15/01/2016    |    05/01/2016    |
|   15/01/2016    |    04/01/2016    |
|   15/01/2016    |    03/01/2016    |
|   15/01/2016    |    03/01/2016    |
|   15/01/2016    |    03/01/2016    |

当前查询

SELECT tblItem.EntryDate, 
Min(tblItem.ReceivedDate) AS MinReceivedDate, 
Max(tblItem.ReceivedDate) AS MaxReceivedDate
FROM tblItem
GROUP BY tblItem.EntryDate;

电流输出

Query1

| EntryDate  | MinReceivedDate | MaxReceivedDate |
--------------------------------------------------
| 01/01/2016 |    10/12/2015   |   16/12/2015    |
| 15/01/2016 |    03/01/2016   |   05/01/2016    |

期望的输出

Query1

| EntryDate  | MinReceivedDate | CountOfMin | MaxReceivedDate | CountOfMax |
---------------------------------------------------------------------------
| 01/01/2016 |    10/12/2015   |      4     |   16/12/2015    |      1     |
| 15/01/2016 |    03/01/2016   |      3     |   05/01/2016    |      2     |

【问题讨论】:

    标签: sql ms-access correlated-subquery


    【解决方案1】:

    我不知道 MS Access 是否允许这样的子查询。如果这不起作用,请告诉我,我将删除答案。否则:

    SELECT
        SQ.EntryDate,
        SQ.MinReceivedDate,
        SUM(IIF(I.ReceivedDate = SQ.MinReceivedDate, 1, 0)) AS CountOfMin,
        SQ.MaxReceivedDate,
        SUM(IIF(I.ReceivedDate = SQ.MaxReceivedDate, 1, 0)) AS CountOfMax
    FROM (
        SELECT
            SQI.EntryDate,
            MIN(SQI.ReceivedDate) AS MinReceivedDate,
            MAX(SQI.ReceivedDate) AS MaxReceivedDate
        FROM
            tblItem SQI
        GROUP BY
            SQI.EntryDate
        ) SQ
    INNER JOIN tblItem I ON I.EntryDate = SQ.EntryDate
    GROUP BY
        SQ.EntryDate,
        SQ.MinReceivedDate,
        SQ.MaxReceivedDate
    

    【讨论】:

    • 我收到以下错误消息:查询表达式中的语法错误(缺少运算符)'SUM(CASE WHEN I.DateReceived = SQ.MinReceivedDate THEN 1 ELSE 0 End)'。
    • Access 好像不支持CASE 语句,但我找到了正确的函数。我现在会更新。
    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多