This is the original query I'm using and I'm getting the sales amount sorted by the business day (1,5,..31).
SELECT somelogic AS TOTAL,IT.BUSINESS_DAY,IT.BUSINESS_MONTH, IT.BUSINESS_YEAR
FROM (
SELECT SUM(IFNULL(CAST(FSTM.SALE AS DECIMAL(16,4)), 0)) AS ITEM_SALES, FSTM.BUSINESS_YEAR, FSTM.BUSINESS_MONTH, FSTM.BUSINESS_DAY
FROM AGG_FACT_SALE_SALE_TYPE_DAY FSTM WHERE
SALE_TYPE IN ('SALE', 'VOID', 'REOPENED') AND FSTM.MERCHANT_KEY = ${Mkey}
AND FSTM.YEAR = ${Year} AND FSTM.MONTH = ${Month}
GROUP BY FSTM.BUSINESS_DAY ORDER BY BUSINESS_DAY
) AS IT
LEFT JOIN (
sub query
) AS LD ON LD.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
sub query
) AS DC ON DC.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
subquery
) AS R ON R.BUSINESS_DAY = IT.BUSINESS_DAY
So in the 'from' I'm ordering the results according to the business day, then use left join to get the rest of the data.. But in the final result results are not sorted by the business day. Its almost random.
But when I add the ORDER BY To the whole query Im getting the sorted results. Modified query is given below.
SELECT somelogic AS TOTAL,IT.BUSINESS_DAY,IT.BUSINESS_MONTH, IT.BUSINESS_YEAR
FROM ((
SELECT SUM(IFNULL(CAST(FSTM.SALE AS DECIMAL(16,4)), 0)) AS ITEM_SALES, FSTM.BUSINESS_YEAR, FSTM.BUSINESS_MONTH, FSTM.BUSINESS_DAY
FROM AGG_FACT_SALE_SALE_TYPE_DAY FSTM WHERE
SALE_TYPE IN ('SALE', 'VOID', 'REOPENED') AND FSTM.MERCHANT_KEY = ${Mkey}
AND FSTM.YEAR = ${Year} AND FSTM.MONTH = ${Month}
GROUP BY FSTM.BUSINESS_DAY ORDER BY BUSINESS_DAY ASC
) AS IT
LEFT JOIN (
sub query
) AS LD ON LD.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
sub query
) AS DC ON DC.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
subquery
) AS R ON R.BUSINESS_DAY = IT.BUSINESS_DAY
) ORDER BY IT.BUSINESS_DAY ASC
So can some one shed some light why this happens ?