SELECT M.STOCK_NAME, M.TRADE_DAYS, M.STOCK_COUNT, M.TF
FROM (SELECT T.STOCK_NAME,
TIME_TO_MARKET(T.STOCK_NAME) TRADE_DAYS,
T2.STOCK_COUNT,
CASE
WHEN TIME_TO_MARKET(T.STOCK_NAME) = T2.STOCK_COUNT THEN
1
ELSE
0
END TF
FROM (SELECT STOCK_NAME
FROM JQDATA.ORDER_ACTIVITIES
GROUP BY STOCK_NAME) T
LEFT JOIN (SELECT STOCK_NAME, COUNT(1) STOCK_COUNT
FROM JQDATA.ORDER_ACTIVITIES
GROUP BY STOCK_NAME) T2
ON T2.STOCK_NAME = T.STOCK_NAME) M
WHERE M.TF = 0
以其它字段作为条件的时候没啥问题,case when字段作为条件字段查询特别慢。
你这sql和下面这个貌似是等价的
SELECT STOCK_NAME,
TIME_TO_MARKET(T.STOCK_NAME) TRADE_DAYS,
COUNT(1) STOCK_COUNT,
CASE WHEN TIME_TO_MARKET(T.STOCK_NAME) = T2.STOCK_COUNT THEN
1 ELSE 0 END TF
FROM JQDATA.ORDER_ACTIVITIES
GROUP BY STOCK_NAME
having TIME_TO_MARKET(T.STOCK_NAME) <> COUNT(1)
其实效率点应该先考虑一下这个TIME_TO_MARKET自定义函数,毕竟这玩意要作为条件使用,看能不能把逻辑拆开,放到sql里