2011-07-07 12 views
0

日付、ユーザー名、およびその日付の12個の操作IDの1つを持つクエリが必要です。どのように日付を選択肢に渡すのですか?

bob 1 
bob 2 
bob 3 
bob 4 
bob 5 
bob 6 
bob 7 
bob 8 
bob 9 
bob 10 
bob 11 
bob 12 
jimmeh 1 
jimmeh 2 
jimmeh 3 
jimmeh 4 
jimmeh 5 
jimmeh 6 
jimmeh 7 
jimmeh 8 
jimmeh 9 
jimmeh 10 
jimmeh 11 
jimmeh 12 
jimbo 1 
jimbo 2 
jimbo 3 
jimbo 4 
jimbo 5 
jimbo 6 
jimbo 7 
jimbo 8 
jimbo 9 
jimbo 10 
jimbo 11 
jimbo 12 

しかし、私はまた、毎日参加横断したいと思います:例えば

operations 
"id";"name"; 
"1";"LASER CUTTING" 
"2";"DEBURR" 
"3";"MACHINING" 
"4";"BENDING" 
"5";"PEM" 
"6";"WELDING" 
"7";"PAINT PREPARATION" 
"8";"PAINTING" 
"9";"SILKSCREEN PREPARATION" 
"10";"SILKSCREEN" 
"11";"ASSEMBLY - PACKAGING" 
"12";"LASER PREP"; 

とユーザーテーブル

bob 
jimmeh 
jimbo 

私は、クロスはこのような何かを得るためにそれらのテーブル間の結合を持っています2011年1月1日から現在までの間、私はこのクエリを使用して毎日のすべての操作のためのすべての人のためのレコードを私がピボットテーブルに入れて、それを毎週のレポートを駆動するために使うことができます各操作のユーザーごとにdb.usersが結合操作から

は、今のところ、私は単純なselectユーザーIDを持っているのDepartmentID =

私はこれを試してみました8:

1を選択しただろうかと同様に
select 
    userid, 
    first_name, 
    last_name, 
    operations.id, 
    operations.name 
from 
    protocase.tblusers 
join 
    operations 
join 
    select (BETWEEN "2011-01-01" and NOW()) 
where 
    departmentid = 8 and 
    protocase.tblusers.active = 1 

(1,2,3 )やテーブルから来ていないものがありますが、1月1日から今までのすべての日付をどのように選択するかわかりません。これも可能ですか?

+2

試しましたか?また、質問には通常どこかに疑問符が付いています。 – JNK

+0

質問はタイトルにあります。また、私が試したことを反映するために編集されました。 – davidahines

+1

タイトルの質問に対する回答は「はい」です。 :) – JNK

答えて

1

あなたはこのhttp://www.techrepublic.com/blog/datacenter/simplify-sql-server-2005-queries-with-a-dates-table/326

編集などの日付のテーブル作成することができます。日付を生成するストアドプロシージャを追加しました:

DROP PROCEDURE IF EXISTS datePopulate; 
DELIMITER $$ 
CREATE PROCEDURE datePopulate(startDate datetime, numDays int) 
BEGIN 

declare currDate datetime default startDate; 
declare i int default 1; 

WHILE (i<=numDays) DO  

    INSERT INTO DateLookup(DateFull, fullYear, weekdayname) 
    VALUES(currDate, date_format(currDate, '%Y'), date_format(currDate, '%a')); 
    SET i = i+1; 
    SET currDate = DATE_ADD(currDate , INTERVAL 1 DAY); 

END WHILE; 

END $$ 
DELIMITER ; 

プロシージャが作成されたら、それは次のように呼び出すことができます。

CALL datePopulate('2011-01-01', 30); 

2011-01-01から30日後にテーブルに入力されます。

insert文にすべての列を追加しませんでした。 hereの情報を使って追加するのはかなり簡単です。

+0

Hmm。これはTSQLにありますが、違いはわかりません。私は@記号を削除し、変数名を変更しようとしましたが、行っていません。 – davidahines

+1

もっと明白なはずですが、私はちょうどあなたに日付表の考えを示すことを意味していました。このスクリプトは日付を生成する方法を示していましたが、これにはさまざまな方法があります。私はそれをやったときに私はjavaでデータを作成したと思う。 – xecaps12

+0

ああ。私はちょっと試してハックしようと思っています。それを働かせることができるかどうかを見てください。 – davidahines

1

最も簡単な方法は、年内のすべての日付を含む事前定義済みの表を作成することです。これは365行の最大値になります。クエリでこのテーブルを使用して、2011-01-01とNOW()の間の行のみを選択することができます。これはまた、毎回の実行時に日付表を作成しないようにすることで、より少ないジョブを実行する必要があることを意味します。

あなたがこれを必要とするかどうかはわかりませんが、ちょっと別の考えです。 2012年のような毎年の日付表を作成する予定がある場合は、同様の日付表を使用したいが、2012年のすべての日付を使用する場合は、年なしで日付と月のみを保管することを検討することができます。

希望はこれが理にかなっています。

+0

http://stackoverflow.com/questions/6613986/how-do-i-convert-this-from-tsql-to-mysql/6614403#6614403 – davidahines

+0

私は完全に同意します、私はその質問にテーブルを設定しようとしていますしかし、私は苦労している。私はこのチュートリアルを使用していますが、それはT-SQLのため、難しさがあります:http://www.techrepublic.com/blog/datacenter/simplify-sql-server-2005-queries-with-a-dates-table/326 – davidahines

関連する問題