2017-08-11 11 views
0

foxproテーブルには、ordernum、orderdate、ordertotal、custpkの4つのフィールドがあります。Foxpro各顧客の最新注文を選択

各custpkの最新の注文からこれらのフィールドをすべて返すfoxproのselect文は何ですか?

+0

私たちはあなたに答えを与えることができます前に:

はまた、そのサイトで無料の1、オンラインVFPチュートリアルビデオが命名されていることに注意します質問する質問は:ordernum&orderdateのフィールドの種類は何ですか。 OrderNumは数値か文字型ですか? OrderDateは日付、日付、または文字の種類ですか? SQLクエリの構文は、あなたの答えに応じて変わる可能性があります。 – Dhugalmac

+0

注文日は日付フィールド、ordernumは整数、ordertotalはN 9,2、Custpkは整数です。わかりやすくするために、これはfoxproテーブルです.SQLデータベースではなく、foxproコマンドが必要です。 – EddieC

答えて

2

あなたのテーブル構造と何がしたい非常に明確ではありません:あなたは無料、オンラインVFPのチュートリアルビデオを見ているいくつかの時間を過ごしたいかもしれません。特定の顧客に対して「最新の注文」をどのように定義しますか? orderNumがそのテーブルの主キーであり、顧客ごとに最も高いorderNumを持つ行によって特定の顧客の「最新の注文」を決定するとします。そして、それは簡単で、単一VFPは、コマンドを選択し、十分なされた(実際にはあなたが必要結果を返す多くのSQL選択のバリエーションがあります以下は、最も効率的であるものの一つです。):

ところで
select * from myTable ; 
    where orderNum in ; 
    (select max(orderNum) from myTable group by custPK) 

、 VFPのSQLは、ANSI-SQLに近い92

0

私は、あなたが、あなたは、単一のFoxProコマンドラインで欲しいものを得ることはありませんと言ってみましょうSQLデータベース

、FoxProコマンドをする必要はありません。

これをFoxProで取得する最も便利な方法は、FP/VFPデータテーブルで実行されるFoxproのSQLクエリコマンドを使用して、結果のデータをデータテーブル/カーソルに取得することです。

SELECT CustPk, OrderNum, OrderDate, OrderTotal FROM MyDataTable ORDER BY CustPk, OrderDate Desc INTO CURSOR OrderedData READWRITE 
* --- Now ordered data is in memory cursor, use it however you need --- 
* --- Each Customer's Most Recent Order will be first record --- 
SELECT OrderedData 
* --- You might just want to BROWSE the results to understand how the data appears --- 
* --- Or you can do anything else with the data --- 
< do whatever > 

お客様ごとに最新の注文のみを取得する方法はありますが、ここから開始して、必要なものが得られるかどうかを確認する方法があります。

ところで: Free Visual Foxpro Videos

グッドラック

+0

ありがとう、これは私が過去にやったことですし、不要なレコードをすべて削除します。私はfoxproのSQLクエリーを知っているだけでなく、私はそのすべての時間に頼るべきです。私はSQLクエリコマンドだけでそれを行う方法を探したいと思います。 – EddieC

+0

VFPのSQLクエリ構文のほとんどは、他のデータベースSQLクエリ構文と同じです。確かにFP/VFPとのいくつかの違いがありますが、あなたが知っているものを試してみて、動作しているかどうかを確認してください。そうでない場合は、クエリ構文のどの部分がうまく機能していないかを確認して、その部分をFP/VFPコマンド構文で置き換えてください。 – Dhugalmac

0
私はまあ、私はちょうどSQL Queryコマンドでそれをやった

だけでSQLクエリーコマンドでそれを行う方法を見つけたい

ています他のコードをフォローアップする必要がありました。

編集:おっと:私はCustpkが整数であることを忘れていました。
これを考慮するSQLクエリの構文を変更しています。

それはまだONE LINE方法はありませんが、別の方法は次のようになります。

* --- Get reference records of only customer's last order date --- 
SELECT STR(CustPk) AS cCustPk, MAX(OrderDate) AS LstOrdrDt FROM MyDataTable GROUP BY CustPk INTO CURSOR LstOrds READWRITE 
* --- Now use that to get the complete last order for each customer --- 
SELECT * FROM MyDataTable WHERE (STR(CustPk) + DTOS(OrderDate)) IN (SELECT cCustPk + DTOS(LstOrdrDt) AS KeyExp FROM LstOrds) INTO CURSOR OnlyLstOrds READWRITE 
* --- Now you have ONLY the last orders --- 
SELECT OnlyLstOrds 
< do whatever > 

NOTE上記のコードは、オフ・カフで、テストされていないので、あなたそれにタイプミスがあるかもしれません修正することができます。まず、FoxProとSQL言語

グッドラック

+0

VFPはサブクエリと派生クエリをサポートしています。 select * from myTable t1 inner join(custPKでmyTableグループからmaxDateとしてcustPK、max(OrderDate)を選択)t1.custPK = t2.custPKおよびt1.OrderDate = t2.OrderDateのt2 (但し、与えられた顧客に対して単一の注文のみが存在する場合を除き、最新の注文を返すことを意味するものではない)。 –

関連する問題