在雪花中的临时 table 中计算大小写

Having count with case when in a temporary table in snowflake

我正在尝试根据 having count 条件对 return a table 进行查询,如果行数 > 2,那么它应该 return 只有我一个字段的最大值并与另一个 table 合并。如果它等于 1,那么只需拉出 table 的所有内容,它看起来有点像这样,我不知道雪花的正确语法:

WITH TEMP_SHIPMENTS AS (
    SELECT 
      ORDERNUMBER,
      POSITIONNUMBER,
      ITEMCODE,
      ITEMDESCRIPTION,
      SHIPMENTNUMBER,
      LOAD,
      QUANTITY,
      SERIALNUMBER,
      CUSTOMERNAME,
      SHIPTOADDRESS,
      MAX(CUSTOMERORDER),
      CUSTOMERLINE,
      DELIVERYDATE
    FROM 
        T_SHIPMENTS


    GROUP BY
        ORDERNUMBER,
      POSITIONNUMBER,
      ITEMCODE,
      ITEMDESCRIPTION,
      SHIPMENTNUMBER,
      LOAD,
      QUANTITY,
      SERIALNUMBER,
      CUSTOMERNAME,
      SHIPTOADDRESS,
      CUSTOMERORDER,
      CUSTOMERLINE,
      DELIVERYDATE
)
CASE WHEN HAVING COUNT FROM TEMP_SHIPMENTS.CUSTOMERORDER >2
THEN
SELECT ORDERNUMBER,
      POSITIONNUMBER,
      ITEMCODE,
      ITEMDESCRIPTION,
      SHIPMENTNUMBER,
      LOAD,
      QUANTITY,
      SERIALNUMBER,
      CUSTOMERNAME,
      SHIPTOADDRESS,
      CUSTOMERORDER,
      CUSTOMERLINE,
      MAX(DELIVERYDATE) 
FROM TEMP_SHIPMENTS;

关于如何实现它的任何想法?

 SELECT 
      ORDERNUMBER,
      POSITIONNUMBER,
      ITEMCODE,
      ITEMDESCRIPTION,
      SHIPMENTNUMBER,
      LOAD,
      QUANTITY,
      SERIALNUMBER,
      CUSTOMERNAME,
      SHIPTOADDRESS,
      CUSTOMERORDER,
      CUSTOMERLINE,
      DELIVERYDATE
    FROM 
        T_SHIPMENTS
    WHERE SerialNumber = '012501003449'   ;

Result table from query 我将结果留在此处,如您所见,我有相同的 serialNumber 和两条记录,这没关系,但我只需要一条。那将是具有最长日期时间或最大客户订单号的那个。我尝试通过查询最大值进行查询,但在这两个字段中都没有取得任何成果,我仍然得到两条记录,而不是只有一条具有最大值的记录

恐怕您不能在任何数据库中以纯 SQL 的形式真正执行条件联合,也不能将 HAVING 子句用于除分组结果优化之外的任何其他用途。

如果你想return排在MAX(CUSTOMERORDER),我会尝试:

WITH TEMP_SHIPMENTS AS (
    SELECT ROW_NUMBER() over (PARTITION BY SERIALNUMBER ORDER BY CUSTOMERORDER desc) row_num,
      ORDERNUMBER,
      POSITIONNUMBER,
      ITEMCODE,
      ITEMDESCRIPTION,
      SHIPMENTNUMBER,
      LOAD,
      QUANTITY,
      SERIALNUMBER,
      CUSTOMERNAME,
      SHIPTOADDRESS,
      CUSTOMERORDER,
      CUSTOMERLINE,
      DELIVERYDATE
    FROM 
        T_SHIPMENTS
)

SELECT *
FROM TEMP_SHIPMENTS
WHERE row_num = 1

你的问题不清楚这应该是整个 table 的最大值 ordernumber 还是一个组的最大值 ordernumber - 根据你附加的图像,听起来像你想要每个 serialnumber 的最大 ordernumber,所以这就是我划分的。但是,如果您希望某个项目或客户的最大 ordernumber 分别为 itemdescriptioncustomername,则可以将该分区设为 customername