Problem with orderby on a datetime column
I've got a database that at the minute, I don't have access to directly, with phpmyadmin (I've lost the password).
The query uses a group by (if that's relevant) and I need to order it by a date field, I can only presume it's a date time field. It outputs dates like this when I output them directly {ts '2011-08-25 11:15:52'}. I need to order by this date.
I've tried this but it doesn't affect the ordering at all.
ORDER BY i.createdOn DESC
The entire query is here.
<cfquery name="dbRsResults1" datasource="#datasource#" maxrows="#irMaxResults+1#">
SELECT DISTINCT i.id AS id,
i.company AS company,
i.insolvencyDate AS insolvency_date,
i.city AS city,
i.createdOn AS createdOn,
1 AS rank_id,
t.entryCopy AS insolvency_type,
i.businessNature AS business_nature,
'I' AS i_type
FROM insolvencies i,
<!---practitioners p,--->
lookupcopy t
WHERE i.checked = 1 AND
t.id = i.insolvencyType <!---AND
p.id = i.practitioner--->
<!---<cfif isUseDates is "Y">--->
AND i.insolvencyDate >= #isStartDate# AND
i.insolvencyDate <= #isEndDate#
<!---</cfif>--->
<cfif isType neq 0>
AND i.insolvencyType = #isType#
</cfif>
<cfif isRegion gt 0>
开发者_高级运维 AND i.region = #isRegion#
</cfif>
<cfif isCategory gt 0>
AND i.businessCategory = #isCategory#
</cfif>
<cfif termsCount gt 0>
AND (
<cfloop from="1" to="#termsCount#" index="i">
(LOWER(i.company) LIKE '%#trim(aTerms[i])#%' OR
LOWER(i.businessNAture) LIKE '%#trim(aTerms[i])#%')
<cfif i LT termscount>
OR
</cfif>
</cfloop>
)
</cfif>
GROUP BY id
<cfif isSearchByDate is "Y">
ORDER BY i.createdOn DESC
</cfif>
</cfquery>
When you use GROUP BY
, as the name suggests, you are generating new rows that are the combination of one or more physical rows. You won't get any useful sort order if you order by values from the original rows. An example:
Name Country Age
======= ======= ===
Abe UK 20
Bill France 30
Charles France 25
David UK 45
Edward UK 33
If we run:
SELECT Country, MIN(age) AS min_age
FROM people
GROUP BY Country
... we get something like this:
Country min_age
======= =======
UK 20
France 25
... it doesn't make sense to order by name.
If your query is not grouped by createdOn
, then your order by clause will have no effect.
You need to order by a selected column with group by.
精彩评论