在雪花中的临时表中计数时的情况

时间:2020-02-26 14:59:20

标签: sql snowflake-cloud-data-platform

我正在尝试根据具有计数条件来查询返回表,如果行计数> 2,则它应该仅返回字段的最大值并与另一个表进行联合。如果等于1,则只需拉表中的所有内容,它看起来就会像这样,我不知道雪花的正确语法:

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 我将结果留在了这里,如您所见,我有两个记录的序列号相同,也可以,但是我只需要一个。那将是具有最大日期时间或最大客户订单号的日期。我尝试通过最大值查询,但在这两个字段中均未获得任何结果,我仍然得到两条记录,而不是只有一条具有最大值

2 个答案:

答案 0 :(得分:0)

恐怕您不能真正在任何数据库中使用纯SQL进行条件联合,也不能将HAVING子句用于除对结果进行分组以外的其他任何事情。

答案 1 :(得分:0)

如果您想返回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

您的问题尚不清楚,这应该是整个表的最大值ordernumber还是一个组的最大值ordernumber-根据您所附加的图像,听起来您想要的是最大值{{1 }}中的每个ordernumber,这就是我划分的内容。但是,如果您要分别分配商品或客户的最大serialnumber,则可以将该分区设置为itemdescriptioncustomername