开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜