1

SQLiteバージョン3.3.6

sqliteにテーブルがあります

CREATE TABLE stats (Date TEXT , Sub TEXT ,  DELAY95TH INT ) ;

ここで、各行は:

Date      |Sub|Delay
2012-06-25|212|750
2012-06-25|214|1180
2012-06-25|216|14902

タスクは、要約された遅延によってSubがトップ10からのすべてのレコードを取得することです

これを行うSQL:

Select 
    Date, Sub, Delay 
from 
    stats 
where 
    Sub in (select Sub 
            from stats 
            group by Sub  
            order by SUM(Delay) desc limit 10 ) ;

ただし、結果は得られません。「orderby」句を削除するとすぐにクエリが機能し始めます。

したがって、たとえば:

select 
    Date, Sub, Delay 
from  
    stats  
where
    Sub in (select Sub from stats group by Sub limit 10);

うまく機能し、期待されるものを生み出します。

これ以上。同じインスタンスにテーブルもあります:

CREATE TABLE data ( Date DATE , Sub INT, Subcont TEXT, Session INT, MsgType TEXT, Score INT);

問題のあるものと同様に選択すると、正常に機能します。

select 
    Subcont, MsgType, SUM(Score) 
from
    data 
where 
    Subcont in (select Subcont 
                from data 
                group by Subcont 
                order by sum(Score) desc limit 10) 
group by
    Subcont, MsgType 
order by 
    Subcont, MsgType; 

ほぼ同じことを行います。要約されたスコアによって上位10のサブコンテンツを識別し、これらのサブコンテンツを含むすべてのレコードを表示します。そしてそれはうまくいきます!

4

2 に答える 2

1

問題が見つかりました。

それがバグなのか、sqliteでの目的のために設計されたものなのかはわかりません。問題は、テキストフィールドで操作しているときに、サブクエリで「orderby」が機能しないことです。

TXTがINTに変換されたSubの後、次のクエリは期待される結果を返し始めました。

Select Date, Sub , Delay from stats where Sub in (select Sub from stats group by Sub  order by Sub) ; 
Select Date, Sub , Delay from stats where Sub in (select Sub from stats group by Sub  order by SUM(Delay) desc limit 10 ) ; 

SubはTEXTでしたが、これらのクエリは何も返しませんでした。

唯一の疑問が残ります。Subにいくつかの文字が含まれていて、それをINTに変換することが不可能な場合、解決策は何でしょうか。

于 2012-07-06T16:17:03.947 に答える
0

「日付」列の名前をd1に変更すると(DATEはSQLのキーワードです)、expected(?)出力が得られます。

create table stats (d1 date, sub number, delay number);
insert into stats values('2012-06-25', 212, 750);
insert into stats values('2012-06-25', 214, 1180);
insert into stats values('2012-06-25', 216, 14902);

Select D1, Sub , Delay from stats where Sub in (
select Sub from stats group by Sub  order by SUM(Delay) desc limit 10 ) ;

3行を返します。したがって、[日付]列の名前を変更して、もう一度やり直してください:-)

于 2012-07-06T14:34:40.440 に答える