2017-02-08 4 views
-3

NYCのヘルプリクエストに関するbigqueryデータからいくつかの行と列を選択しようとしています。私は5つの列を選択したい - などの要求が行われた要求作成日、都市、依頼を受けた代理店、SQLの特定の行を選択するときの構文エラー(Rの場合、RSQLITEを使用)

まず、私は私がしたい列を選択するために管理:

conn <- dbConnect(SQLite(),'nyc311.db') 
dbListFields(conn, "requests") 

df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor FROM requests) 

    Agency   Created Date   Complaint Type  City     Descriptor 
1 DOHMH 01/25/2016 02:11:12 AM  Indoor Air Quality BRONX Chemical Vapors/Gases/Odors 
2 NYPD 01/25/2016 02:08:08 AM   Noise - Vehicle NEW YORK    Car/Truck Horn 
3 NYPD 01/25/2016 02:07:24 AM Noise - Street/Sidewalk NEW YORK    Loud Talking 
4 CHALL 01/25/2016 02:05:00 AM Opinion for the Mayor        HOUSING 
5 HRA 01/25/2016 02:01:46 AM Benefit Card Replacement        Medicaid 
6 NYPD 01/25/2016 01:54:56 AM   Blocked Driveway CORONA     No Access 

方法を私は代理店= NYPD、市=ブロンクス、クイーンズを得るように.dbファイルから選択できますか?作成日= 2015年?私は以下を試みたが、構文エラーが出ている。

df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor 
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="NYPD" 
        AND YEAR(Created Date)=2015') 

私は、作成日は、文字形式ではなく、整数に日付と時刻を示して以来、私は、今年サブセットする方法については明らかではないよ初心者です。私はまた、コード以外の部分が実行されていることに気づいたYEAR(Created Date)=2015

+0

なぜあなたはMySQLを作成した日付 チェックで構文エラーにラベルを付けたのだと思います実際にSQLiteを使用している場合は? –

+0

@TimBiegeleisenこんにちは、私はちょっと混乱してしまいました。すごく混乱しました。私はSQLを初めて使い、2つのRSQLITEとMySQLが異なる言語であることに気付きました。 – song0089

答えて

0

SQLiteにはYEAR()の機能はありません(MySQLには1つ、したがってあなたの混乱があります)。最初に、あなたの日付をテキストとして保存していることと、ANSI以外の形式のmm/dd/yyyyに日付を保存していることに注意してください。各レコードの年を比較するには、SQLiteの文字列関数を使用してこの情報を抽出する必要があります。以下の作業をする必要があります:あなたはまた、空白文字をエスケープするために二重引用符でCreated Date列名を配置する必要があり

SUBSTR("Created Date", 7, 4) 

注意。

SELECT "Agency", 
     "Created Date", 
     "Complaint Type", 
     "City", 
     "Descriptor" 
FROM requests 
WHERE City IN ('BRONX', 'QUEENS') AND 
     Agency = 'DOHMH' AND 
     SUBSTR("Created Date", 7, 4) = '2015'  -- compare against the string '2015' 

いくつかの注意:ここで

は、私が使用する実際のクエリがある文字列データのための単一引用符を使用するようにSQLで慣例です。あなたは二重引用符内のすべての列名を置くことができますが、その他の空白、キーワードを、持っている場合にのみ必要です

+0

こんにちは、私はRでこれを試して、ありがとう、私はメッセージが表示されます:そのような機能はありません:YEAR – song0089

+0

@ song0089私はSQLiteのために私の答えを更新しました。 –

+1

@TimBiegeleisen部分文字列を使用して日付情報を抽出すると、問題が発生する可能性があります。 "作成日"を 'datetime'に変換した後に' strftime'を使う方が安全です – Chrisss

0

私はこの

'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor 
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="DOHMH" 
        AND YEAR("Created Date")=2015' 
+0

私はそのような機能がないと言っているメッセージを受け取りますか? – song0089

関連する問題