SQL Serverテーブルの下位10個の結果を取得します。私はそれらを挿入された最後の10のレコードにしたい、どのように私はこれを行うことができますか?SQL Serverの "top"と反対の順序で、キー/インデックスはありません
私はselect bottom 10 * from mytable
と書いていますが、これは存在しません(afaik)。
最後の10行を挿入します。 タイムスタンプがありません。
SQL Serverテーブルの下位10個の結果を取得します。私はそれらを挿入された最後の10のレコードにしたい、どのように私はこれを行うことができますか?SQL Serverの "top"と反対の順序で、キー/インデックスはありません
私はselect bottom 10 * from mytable
と書いていますが、これは存在しません(afaik)。
最後の10行を挿入します。 タイムスタンプがありません。
できません。
select * from mytable
によって返された最後の10個のレコードが挿入された最後の10個であるという保証は全くありません。使用されるデフォルトの順序はありません。
ORDER BY
が挿入順序を反映した適切な列に必要です。自動インクリメントID(主キー)は、そのテーブルのためにそこにあるならば、あなたはそれを行うことができます
デフォルトの注文とそのようなものはありません。これは設計によるものです。 ORDER BY句が設定されていないときに確定的な順序を適用すると、正当な理由がないために余分なオーバーヘッドが追加されます。 [さて、私が返信していたコメントは削除されました...] –
私はmytableからトップ10 *を選択すると、実際には挿入順にそれらを返します...? – NimChimpsky
@NimChimpskyジョインや条件文がなく、誰も最近SQLクエリエンジンを書き直すことを選択していない(つまり、この動作は偶然であり保証されていない)場合にのみ、結果は "挿入順"になります –
:MySQLで
select top 10 *
from mytable
order by id desc
テーブルに自動インクリメントID(プライマリキー)があっても、クエリーが最後に挿入されたことを確認することはできません。例えば、値-1を指定した挿入が完了した可能性があります。 – automatic
あなたはトリガーを使用してそれを行うことができますselect * from table LIMIT 0,10
にidentity_insertを設定したIDフィールドこの質問は、MySQLではなくSQL Server用です。 – MatBailie
を使用することができます。
ちょうど挿入された行のPKを、何らかの種類のインデックスを増やしながら監査テーブルに保存します(IDはおそらく十分です)。 10行以上ある場合は最も古いものを削除します。
次に、監査テーブルを元のテーブルに結合して、完全な10行を取得します。 セレクト(
が n個のDESCによってトップ4 * TBLから 順序を選択)として有底
https://stackoverflow.com/a/10636585/2858777
* Nによって底 順序から
データ源:
| N | | ---- | | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 |
出力:
| N | | ---- | | 7 | | 8 | | 9 | | 10 |
「トップ」とは思っていません。また、テーブルのプライマリキー/ユニークIDは何ですか?SQLServerのIDまたはGUIDですか? –
@ MarkBannister pkがありません – NimChimpsky
最後の挿入順序を決定するために* something *を追加するためにテーブルのスキーマを変更する必要があるようです - マージレプリケーションをサポートする必要がない場合、IDENTITY関係は十分です。そうしないと、挿入されたタイムスタンプが必要になります(監査にも便利です)。 –